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. 统计学与R语言

    书籍推荐 文末见下载链接. 主要有 :统计学习方法.R语言实战.统计学(贾俊平) 链接:百度网盘 提取码:提取码

  2. java的“同一”与“相等”

    变量:引用(指向地址) + 值(该变量指向值所储存的那一片内存) 两个变量同一 : 判断 是否 这两个变量指向同一片内存. 两个变量相等 : 判断 是否 这两个变量的类型相同,且值相等. 注:常用的& ...

  3. VisualCalendar-可视化日历的创建

    public class VisualCalendar { public static void main(String[]args){ System.out.println("请输入日期( ...

  4. Struts2 S2-059 (CVE-2019-0230 )复现 及流量分析、特征提取

    一.简介 2020年08月13日,Apache官方发布了Struts2远程代码执行漏洞的风险通告,该漏洞编号为CVE-2019-0230,漏洞等级:高危,漏洞评分:8.5 二.漏洞描述 Struts2 ...

  5. django路径问题

    1. 初始化项目结构 2.创建Django项目 使用pycharm打开项目 1.右击---->编辑配置 > 2.文件---->设置 > 3.文件---->设置 > ...

  6. 超实用的14个 Spring MVC “隐藏”技巧,用了都说好!

    通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet ...

  7. CSS换行和省略号

    换行 原地址:https://www.cnblogs.com/meowcool/p/10130103.html //强制不换行 div{ white-space:nowrap; } //自动换行 di ...

  8. 833. Find And Replace in String —— weekly contest 84

    Find And Replace in String To some string S, we will perform some replacement operations that replac ...

  9. 转载-Java匿名内部类

    作者: chenssy 出处: http://www.cnblogs.com/chenssy/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...

  10. 从比心APP源码的成功,分析陪玩系统源码应该如何开发

    提起游戏陪玩系统,相信大家都不陌生.作为一名骨灰级的手游玩家,小编对于陪玩系统源码也有些了解.在互联网络发展愈发迅速的今天,游戏产业在一中领域中脱颖而出,据统计,手机游戏用户已经达到5.29亿,较20 ...