Django之ModelForm实际操作使用
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实际操作使用的更多相关文章
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...
- Python开发【Django】:Model操作(二)
Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...
- Django - 表与ORM操作
Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...
- 【Django】ModelForm
ModelForm 1.Model与Form内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class Logi ...
- 【Django】Django model与数据库操作对应关系(转)
Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- Django的ModelForm
基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- Django ORM那些相关操作zi
Django ORM那些相关操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs) ...
随机推荐
- 统计学与R语言
书籍推荐 文末见下载链接. 主要有 :统计学习方法.R语言实战.统计学(贾俊平) 链接:百度网盘 提取码:提取码
- java的“同一”与“相等”
变量:引用(指向地址) + 值(该变量指向值所储存的那一片内存) 两个变量同一 : 判断 是否 这两个变量指向同一片内存. 两个变量相等 : 判断 是否 这两个变量的类型相同,且值相等. 注:常用的& ...
- VisualCalendar-可视化日历的创建
public class VisualCalendar { public static void main(String[]args){ System.out.println("请输入日期( ...
- Struts2 S2-059 (CVE-2019-0230 )复现 及流量分析、特征提取
一.简介 2020年08月13日,Apache官方发布了Struts2远程代码执行漏洞的风险通告,该漏洞编号为CVE-2019-0230,漏洞等级:高危,漏洞评分:8.5 二.漏洞描述 Struts2 ...
- django路径问题
1. 初始化项目结构 2.创建Django项目 使用pycharm打开项目 1.右击---->编辑配置 > 2.文件---->设置 > 3.文件---->设置 > ...
- 超实用的14个 Spring MVC “隐藏”技巧,用了都说好!
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet ...
- CSS换行和省略号
换行 原地址:https://www.cnblogs.com/meowcool/p/10130103.html //强制不换行 div{ white-space:nowrap; } //自动换行 di ...
- 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 ...
- 转载-Java匿名内部类
作者: chenssy 出处: http://www.cnblogs.com/chenssy/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...
- 从比心APP源码的成功,分析陪玩系统源码应该如何开发
提起游戏陪玩系统,相信大家都不陌生.作为一名骨灰级的手游玩家,小编对于陪玩系统源码也有些了解.在互联网络发展愈发迅速的今天,游戏产业在一中领域中脱颖而出,据统计,手机游戏用户已经达到5.29亿,较20 ...