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. Ubuntu下创建apt源

    1. 下载所需安装文件 sudo apt-get install soft name  安装并保存安装文件 或者 sudo apt-get source soft name      只下载安装文件 ...

  2. 一起学Vue:UI框架(element-ui)

    目标 使用Vue+ElementUI构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 效果页面 比如我们要实现这样列表.新增.编辑三个页面: 列表页面 新增页面 编辑页面 安装elem ...

  3. CSS动画之过渡模块

    :hover伪类选择器可以用于所有的选择器(只有在悬停时,执行选择器的属性)CSS3中新增过渡模块:transition property(属性)duration(过渡效果花费的时间)timing-f ...

  4. js的几个牛逼操作

    1.条件语句的优化 // 根据颜色找出对应的水果 // bad function test(color) { switch (color) { case 'red': return ['apple', ...

  5. Python+Django实现微信扫码支付流程

    Python+Django实现微信扫码支付流程 关注公众号"轻松学编程"了解更多. 获取源码可以加我微信[1257309054],文末有二维码. [微信公众号支付官网]https: ...

  6. WSL Ubuntu 18.04 LTS + VS Code

    WSL Ubuntu 18.04 LTS + VS Code ​ WSL(Windows Subsystem for Linux)使得Windows用户能够在Windows系统上使用原生的Linux环 ...

  7. CentOS6.x 安装 nginx-1.19.4

    1.下载nginx http://nginx.org/en/download.html wget  http://nginx.org/download/nginx-1.19.4.tar.gz 2.解压 ...

  8. Layui弹出层详解

    今天空了学习一下弹出层 还是一步步展示把 首先,layer可以独立使用,也可以通过Layui模块化使用.我个人一直是用的模块化的 所以下面素有的都是基于模块化的. 引入好相关文件就可以开始啦  今天放 ...

  9. 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码

    一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,92 ...

  10. 1. 线性DP 1143. 最长公共子序列

    最经典双串: 1143. 最长公共子序列 (LCS)  https://leetcode-cn.com/problems/longest-common-subsequence/submissions/ ...