当前位置: 首页 > wzjs >正文

临淄网站建设价格如何查找网站所有页面

临淄网站建设价格,如何查找网站所有页面,网站简单化,网站首页的图标是怎么做的【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 【Django】教程-3-数据库相关介绍 【Django】教程-4-一个增删改查的Demo 11. ModelForm 11.1 models.py from django.utils import timezone from django.db import models# 数据库&#xff…

【Django】教程-1-安装+创建项目+目录结构介绍
【Django】教程-2-前端-目录结构介绍
【Django】教程-3-数据库相关介绍
【Django】教程-4-一个增删改查的Demo

11. ModelForm

  • 11.1 models.py

from django.utils import timezone
from django.db import models# 数据库,表对应关系
class Department(models.Model):"""部门表"""title = models.CharField(verbose_name="部门名称", max_length=32)create_time = models.DateTimeField(verbose_name="创建时间", default=timezone.now)# 数据状态status_choices = ((1, "已删除"),(0, "可用"),)status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=0)# 重写toString方法def __str__(self):return self.titleclass UserInfo(models.Model):'''用户表'''name = models.CharField(verbose_name="姓名", max_length=32)password = models.CharField(verbose_name="密码", max_length=64)age = models.IntegerField(verbose_name="年龄")create_time = models.DateTimeField(verbose_name="创建时间", default=timezone.now)depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", null=True, blank=True,on_delete=models.SET_NULL)# 在django中做的约束gender_choices = ((1, "男"),(2, "女"),)gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices, default=1)# 数据状态status_choices = ((1, "已删除"),(0, "可用"),)status = models.SmallIntegerField(verbose_name="数据状态", choices=status_choices, default=0)
  • 11.1 forms.py

from django import forms
from .models import Department, UserInfoclass DepartmentForm(forms.ModelForm):class Meta:model = Departmentfields = "__all__"class UserModelForm(forms.ModelForm):name = forms.CharField(min_length=8, label="用户名")class Meta:model = UserInfo# fields = ['name', 'password', 'age', 'gender']fields = "__all__"# 排除哪个字段# exclude = ['status']# 样式重写 def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continuefield.widget.attrs = {"class": "form-control", "placeholder": field.label}
  • 11.1 urls.py

from django.urls import path
from appTang import views# 映射关系,视图--->函数
urlpatterns = [path('user/modelform/add', views.user_modelform_add),path('user/modelform/edit/<int:nid>/', views.user_modelform_edit),]
  • 11.1 user_model_add.html

{% extends 'layout.html' %}{% block title %}添加用户
{% endblock %}{% block content %}<div><div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"><span class="glyphicon glyphicon-tag" aria-hidden="true">添加用户</span></h3></div><div class="panel panel-body">
{#                novalidate, 关掉浏览器的校验#}<form method="post" novalidate>{% csrf_token %}{% for u in user %}<div class="form-group"><label>{{ u.label }}:</label>{{ u }}<span style="color: red">{{ u.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div></div></div></div>{% endblock %}
  • 11.1 user_model_edit.html

{% extends 'layout.html' %}
{% block title %}编辑用户
{% endblock %}{% block content %}<div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"><span class="glyphicon glyphicon-tag" aria-hidden="true">编辑用户</span></h3></div><div class="panel panel-body"><form method="post" novalidate>{% csrf_token %}{% for u in user %}<div class="form-group"><label>{{ u.label }}:</label>{{ u }}<span style="color: red">{{ u.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div></div></div>
{% endblock %}
  • 11.1 views.py

from django.shortcuts import render, HttpResponse, redirectfrom appTang import models
from appTang.forms import DepartmentForm, UserModelForm
from appTang.models import UserInfo, Department# 用户列表
def user_list(req):"""用户展示"""# select * from userinfo order by name asc; -name 倒序user_list = UserInfo.objects.all().order_by("-name")return render(req, 'user/user_list.html', {"user_list": user_list})def user_modelform_add(req):""" modelform 方式添加用户"""if req.method == 'GET':user = UserModelForm()return render(req, 'user/user_model_add.html', {"user": user})# 用户post提交,数据校验user = UserModelForm(data=req.POST)if user.is_valid():print(user.changed_data)user.save()return redirect("/user/list")# 校验失败, 在页面上展示错误信息return render(req, 'user/user_model_add.html', {"user": user})def user_modelform_edit(req, nid):""" 用户编辑"""if req.method == 'GET':# 根据id获取要编辑,那行数据row_obj = models.UserInfo.objects.filter(id=nid).first()user = UserModelForm(instance=row_obj)return render(req, "user/user_model_edit.html", {"user": user})# 表单提交, 需要先查询到,然后实例化进去row_obj = models.UserInfo.objects.filter(id=nid).first()user = UserModelForm(data=req.POST, instance=row_obj)# 数据校验通过if user.is_valid():# 默认用户保存,用户输入的所有数据# 给数据增加其他的, 需要保存的值, user.instance.字段名 = 值user.save()return redirect("/user/list")# 否则return render(req, "user/user_model_edit.html", {"user": user})
  • 11.1 user_list.html

{% extends 'layout.html' %}{% block content %}<div><div class="container"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/user/modelform/add"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>ModelForm新建用户</a></div><div class="panel panel-default"><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>用户列表</div><table class="table table-bordered"><thead><tr><th>#</th><th>姓名</th><th>密码</th><th>年龄</th><th>部门</th><th>创建时间</th><th>性别</th><th>状态</th><th>操作</th></tr></thead><tbody>{% for i in user_list %}<tr><td>{{ i.id }}</td><td>{{ i.name }}</td><td>{{ i.password }}</td><td>{{ i.age }}</td><td>{% if i.depart %}{{ i.depart.title }}{% endif %}</td><td>{{ i.create_time|date:"Y-m-d H:i:s" }}</td><td>{{ i.get_gender_display }}</td><td>{{ i.get_status_display }}</td><td><a class="btn btn-primary btn-xs" href="/user/modelform/edit/{{ i.id }}">MF编辑</a><a class="btn btn-danger  btn-xs" href="/user/del?nid={{ i.id }}">删除</a></td></tr>{% endfor %}</tbody></table></div></div></div>{% endblock %}
  • 11.1 layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}"/><style>.navbar {border-radius: 0;}</style></head>
<body><nav class="navbar navbar-default"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse"data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">系统</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/user/list">用户管理</a></li><li><a href="/department/list">部门管理</a></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="查询"></div><button type="submit" class="btn btn-default">查询</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div></div>
</nav><div>{% block content %}{% endblock %}
</div><script src="{ % static 'js/jquery-3.7.1.js %'}"></script>
<script src="{ % static 'plugins/bootstrap-3.4.1/js/bootstrap.js %'}"></script></body>
</html>

11.2 forms.py格式校验

from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from .models import Department, UserInfoclass DepartmentForm(forms.ModelForm):class Meta:model = Departmentfields = "__all__"# 添加的 ModelForm
class UserModelForm(forms.ModelForm):name = forms.CharField(min_length=2, label="用户名")# 定义密码正则表达式和验证器password_regex = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$'password_validator = RegexValidator( regex=password_regex,message="密码必须包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符。")password = forms.CharField(label="密码", validators=[password_validator],widget=forms.PasswordInput)class Meta:model = UserInfo# fields = ['name', 'password', 'age', 'gender']fields = "__all__"# 排除哪个字段# exclude = ['status']# widgets = {"name": forms.TextInput(attrs={"class": "form-control"}),#            "password": forms.PasswordInput(attrs={"class": "form-control"})}# 验证方式2 : 定义钩子方法, clean_字段名(self)def clean_age(self):txt_age = self.cleaned_data["age"]if txt_age<=18:#验证不通过raise ValidationError("未成年不允许!")# 验证通过return txt_age# 不允许重名,去数据库查询,校验!def clean_name(self):txt_name = self.cleaned_data["name"]if models.UserInfo.objects.filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_namedef __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continuefield.widget.attrs = {"class": "form-control", "placeholder": field.label}
# 编辑的 ModelForm
class UserModelEditForm(forms.ModelForm):# 定义name不可编辑 name = forms.CharField(disabled=True, label="用户名")password_regex = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$'password_validator = RegexValidator(regex=password_regex,message="密码必须包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符。")password = forms.CharField(label="密码",validators=[password_validator],widget=forms.PasswordInput)class Meta:model = UserInfofields = "__all__"# 排除哪个字段exclude = ['status']def clean_age(self):txt_age = self.cleaned_data["age"]if txt_age<=18:raise ValidationError("未成年不允许!")return txt_agedef __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continueif name == "depart":# 过滤掉 status=1 的数据self.fields['depart'].queryset = Department.objects.exclude(status=1)# 设置默认选项的标签为 请选择self.fields['depart'].empty_label = "请选择"field.widget.attrs = {"class": "form-control", "placeholder": field.label}
# 添加  - 不允许重名,去数据库查询,校验!def clean_name(self):txt_name = self.cleaned_data["name"]if models.UserInfo.objects.filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_name
# 编辑 - 排除自己,校验    def clean_name(self):# print(self.instance.pk)txt_name = self.cleaned_data["name"]if models.UserInfo.objects.exclude(id=self.instance.pk).filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_name

文章转载自:

http://Xj90IZzJ.cgqsw.cn
http://9zKcNxFZ.cgqsw.cn
http://zTp3xDTp.cgqsw.cn
http://8CdPT4Cj.cgqsw.cn
http://0bd0oMh5.cgqsw.cn
http://NRQRleX5.cgqsw.cn
http://eg2TqsPv.cgqsw.cn
http://5ZJ5VirW.cgqsw.cn
http://DjXaeV7f.cgqsw.cn
http://eSSkxgS5.cgqsw.cn
http://nKuHwLmk.cgqsw.cn
http://UdEdAUug.cgqsw.cn
http://ejZkzGUS.cgqsw.cn
http://3uxomfLS.cgqsw.cn
http://RjWNPBpN.cgqsw.cn
http://TaFUBss9.cgqsw.cn
http://Ne1CE552.cgqsw.cn
http://SABIiJli.cgqsw.cn
http://CvEst2uX.cgqsw.cn
http://BXSP8kdE.cgqsw.cn
http://mWx5yXEZ.cgqsw.cn
http://FTGdvsKc.cgqsw.cn
http://KO00EWro.cgqsw.cn
http://7KmxriP3.cgqsw.cn
http://W5KpTf5t.cgqsw.cn
http://0HdhbdAm.cgqsw.cn
http://Lw8B8eZb.cgqsw.cn
http://ze7aKKv3.cgqsw.cn
http://Uer60dLV.cgqsw.cn
http://vQ3O6qfB.cgqsw.cn
http://www.dtcms.com/wzjs/647009.html

相关文章:

  • 南山区住房与建设局官方网站网页设计html代码大全ppt
  • 免费建手机商城网站吗怎么开一家网站开发公司
  • 中国网站排名网小组网站建设方案书
  • 怎么做卡盟网站网站明确内容
  • 资源型网站建设 需要多大硬盘单纯做seo能否提升网站流量
  • 图书销售网站网页设计模板河北助手app下载
  • 淄博网站营销与推广成都哪里好玩好吃
  • 德阳做网站的互联网公司wordpress商城主体
  • 做考勤的网站wordpress管理员改为投稿者
  • 已有网站域名 怎么做网站新泰建设局网站
  • 网站如何管理游戏行业为啥30岁就要转行
  • 户外网站建设温江做网站
  • 最好的营销型网站网站建设国际深圳
  • 武昌做网站公司电话5173网站源码
  • 点击图片进入网站怎么做陕西省高速建设集团网站
  • 千野网站建设html制作网站的步骤
  • 吕梁市住房与城乡建设厅网站好用吗
  • 谢岗网站建设关于要求建设网站的请示
  • 网站建设顾问英语网站备案好弄吗
  • 郴州网站建设专业定制下列不属于网站建设规划
  • 网站建设制作免费咨询网站logo如何替换
  • 烟台市住房和城乡建设厅网站济宁网站建设多少钱
  • 咸阳学校网站建设价格几百块钱可以做网站吗
  • 个人网站建设教学视频百度云盘有关网站设计的书
  • 国内自建站网站流量统计分析的误区
  • 网站资源规划怎么写wordpress广告插件
  • 新网站推广最直接的方法自己怎么建立微网站
  • 网站的需求分析都有哪些内容职业生涯规划大赛官网报名
  • 市北区大型网站建设广州企业建站模板
  • 吴堡网站建设费用邯郸建设网站制作