1.定义model数据库字段如下:

class User(models.Model):
"""
员工信息表用户、密码、职位、公司名(子、总公司)、手机、最后一次登录时间。
"""
username = models.CharField(max_length=32, verbose_name='用户名', unique=True)
password = models.CharField(max_length=32, verbose_name='密码')
position = models.CharField(max_length=32, verbose_name='职位')
company = models.CharField(max_length=32, verbose_name='公司', blank=True,
choices=(('0', '北京总公司'), ('1', '石家庄分公司'), ('2', '广州分公司')))
phone = models.CharField(max_length=11, verbose_name='手机号')
last_time = models.DateTimeField(null=True, blank=True, verbose_name='上次登陆时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='注册时间')
is_active = models.BooleanField(default=True)
avatar = models.ImageField(upload_to='img/avatar', default='img/avatar/dafault.jpeg') def __str__(self):
return self.username

2.form中定义一个通用样式类:

from django import forms
from django.core.exceptions import ValidationError
import hashlib
from app01 import models class BSForm(forms.ModelForm):
"""
拥有bootstrap的样式
""" def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 自定义的操作
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'

3.ModelForm使用加校验参考:

class RegForm(forms.ModelForm):
# username = forms.CharField(label='xxx')
# password = forms.CharField()
password = forms.CharField(error_messages={'required': '这是必选项'},
widget=forms.PasswordInput(attrs={'placeholder': '密码', 'type': 'password'}), label='密码',
min_length=6)
re_pwd = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '确认密码', 'type': 'password'}),
label='确认密码', min_length=6) class Meta:
model = models.User
fields = '__all__' # ['username','password']
exclude = ['last_time', 'is_active']
# labels = {
# 'username': '用户名'
# }
widgets = {
'username': forms.TextInput(attrs={'placeholder': '用户名', 'autocomplete': 'off'}),
'position': forms.TextInput(attrs={'placeholder': '请输入职位'}),
# 'company':forms.Select(),
'phone': forms.TextInput(attrs={'placeholder': '手机号'}),
}
error_messages = {
'username': {
'required': '必填项',
},
'password': {
'required': '必填项',
}
} def clean_phone(self):
import re
phone = self.cleaned_data.get('phone')
if re.match(r'^1[3-9]\d{9}$', phone):
return phone
raise ValidationError('手机号格式不正确') def clean_company(self):
# 不符合校验规则 抛出异常
print(self.cleaned_data)
value = self.cleaned_data.get('company')
if not value:
raise ValidationError('公司是必选项,请重新选择')
return value def clean(self):
self._validate_unique = True # 数据库校验唯一
password = self.cleaned_data.get('password', '')
re_pwd = self.cleaned_data.get('re_pwd') if password == re_pwd:
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
self.cleaned_data['password'] = md5.hexdigest()
return self.cleaned_data
self.add_error('re_pwd', '两次密码不一致!!')
raise ValidationError('两次密码不一致') def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 自定义的操作
field = self.fields['company']
choices = field.choices
choices[0] = ('', '选择公司')
field.choices = choices

4.后端注册写法:

def register(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST, request.FILES)
if form_obj.is_valid():
# 注册成功 form_obj.save()
return redirect('login') return render(request, 'register.html', {'form_obj': form_obj})

Django之ModelForm实际操作使用的更多相关文章

  1. Django中Model-Form验证

    Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...

  2. Python开发【Django】:Model操作(二)

    Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...

  3. Django - 表与ORM操作

    Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...

  4. 【Django】ModelForm

    ModelForm 1.Model与Form内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class Logi ...

  5. 【Django】Django model与数据库操作对应关系(转)

    Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...

  6. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  7. Django的ModelForm

    基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...

  8. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  9. Django ORM那些相关操作zi

    Django ORM那些相关操作   一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs) ...

随机推荐

  1. 微信小程序UI自动化: minium文档部署

    目录 参考资料 1. 在线文档(临时) 2. 本地部署 参考资料 https://git.weixin.qq.com/minitest/minium-doc 1. 在线文档(临时) 其实上面的链接里面 ...

  2. Java学习的第四十六天

    1.例8.1例类 import java.util.Scanner; public class Cjava { public static void main(String[]args) { Time ...

  3. java查询elasticsearch聚合

    java查es多分组聚合: SearchRequestBuilder requestBuilderOfLastMonth = transportClient.prepareSearch(TYPE_NA ...

  4. 排序算法—快速排序(Quick Sort)

    快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. ...

  5. Netty源码解析 -- ChannelOutboundBuffer实现与Flush过程

    前面文章说了,ChannelHandlerContext#write只是将数据缓存到ChannelOutboundBuffer,等到ChannelHandlerContext#flush时,再将Cha ...

  6. SpringMVC 直接返回中文字符串时,出现乱码(?)的问题

    在springmvc.xml中加入下面配置得以解决. <mvc:annotation-driven> <mvc:message-converters> <bean cla ...

  7. react中iconfont字体图标不显示问题

    如下图, 写四个圆圈,直接将iconfont的字体编码写在静态HTML结构中时显示没问题,然而明显这样的结构用循环写是更好的选择, 但是,页面上不能显示字体图片了,而是直接显示字体编码 原因是字体编码 ...

  8. leetcode1Minimum Depth of Binary Tree

    题目描述 求给定二叉树的最小深度.最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量. Given a binary tree, find its minimum depth.The mini ...

  9. python爬虫07BeautifulSoup

    有一个高效的网页解析库 它的名字叫做 BeautifulSoup 它   是一个可以从 HTML 或 XML 文件中提取数据的 Python 库 首先我们要安装一下这个库 pip install be ...

  10. Docker - 解决 Error response from daemon: driver failed programming external connectivity on endpoint tomcat9999

    问题背景 执行 docker start tomcat 报以下的错误 Error response from daemon: driver failed programming external co ...