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. Java SFTP 上传、下载等操作

    Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...

  2. Flutter源码剖析(一):源码获取与构建

    概述 本文介绍了Flutter源码的获取与构建,后面会另有文章介绍Flutter源码的版本管理.开发环境搭建等主题. 准备工作 Flutter源码分为两个部分: flutter/flutter是框架层 ...

  3. python的分支语句与循环

    一.分支语句 1.if else语句 语法: if 条件判断: 执行的语句块1 else : 执行语句块2 当满足条件的时候则执行语句块1 ,不满足条件就执行语句块2 注意:1.条件判断后面要加冒号& ...

  4. Jetbrains全系列产品 2020最新激活方法 (即时更新)

    即时更新:http://idea.itmatu.com/key Jetbrains全系列产品 2020最新激活方法 JMFL04QVQA-eyJsaWNlbnNlSWQiOiJKTUZMMDRRVlF ...

  5. [Luogu P4124] [CQOI2016]手机号码 (数位DP)

    题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...

  6. (模板)graham扫描法、andrew算法求凸包

    凸包算法讲解:Click Here 题目链接:https://vjudge.net/problem/POJ-1113 题意:简化下题意即求凸包的周长+2×PI×r. 思路:用graham求凸包,模板是 ...

  7. php数据映射到echarts中国地图

    echarts和php结合 根据php后台数据,映射到地图上所有的省份,地图市下钻的形式,每次下钻到新地图不合并(合并缩放的话会导致下钻地图位置找不到了),添加了自定义工具栏里面的返回到顶级下钻地图 ...

  8. c#中简单工厂模式

    运算类 public class yunsuan { public static operation create(string operate) { operation oper = null; s ...

  9. 腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重

    一.请确认你的当前python环境为python 2.x 获取 python 版本的方法 (linux shell) # python -v python 2.7.11 二.CLB SDK下载与配置 ...

  10. 搭建面向NET Framework的CI/CD持续集成环境(一)Windows服务器安装Jenkins

    前言 网上大多数都是针对主流的Spring Cloud.NET Core的CI/CD方案.但是目前国内绝大部分的公司因为一些历史原因无法简单的把项目从NET Framework切换升级到NET Cor ...