######################## Form #####################
from django import forms
from django.forms import widgets
from django.forms import fields
class FM(forms.Form):
# 字段本身只做验证,
#is_valid它会循环每一个字段进行验证,
#clean_data是一个字典
#widget这是一个插件,用于定制你的html.下面中{'class': 'c1'} 就是会加个class=c1 的样式 定制页面的时候,想写什么就写什么。可以 {'class': 'c1','root'} 也是可以
#在django forms中 有个fileds, fileds就是代指的字段
#widgets 是插件的意思,所以只要加上这个,就是变成插件了 例如:widget=widgets.PasswordInput
#设置字段的时候。可以设置错误信息error_messages 更具你的 值来配置
#混合验证(可以用于多个条件验证): ComboField(Field)
#fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
user = fields.CharField(
error_messages={'required': '用户名不能为空.'},
widget=widgets.Textarea(attrs={'class': 'c1'}),
label="用户名",
)
pwd = fields.CharField(
max_length=12,
min_length=6,
##如果设置了error_messages 那么这个数据类型就是dict_error。那么在前端获取的时,就是去获取这个字典
error_messages={'required': '密码不能为空.', 'min_length': '密码长度不能小于6', "max_length": '密码长度不能大于12'},
widget=widgets.PasswordInput(attrs={'class': 'c2'})
)
email = fields.EmailField(error_messages={'required': '邮箱不能为空.','invalid':"邮箱格式错误"})
f = fields.FileField()
# p = fields.FilePathField(path='app01')
#ChoiceField 帮你在前端页面显示单选下拉框
city1 = fields.ChoiceField(
choices=[(0,'上海'),(1,'广州'),(2,'东莞')]
)
#MultipleChoiceField 前端页面显示多选下拉框
city2 = fields.MultipleChoiceField(
choices=[(0,'上海'),(1,'广州'),(2,'东莞')]
)
from app01 import models
def fm(request):
if request.method == "GET":
# 从数据库中吧数据获取到
dic = {
"user": 'r1',
'pwd': '123123',
'email': 'sdfsd',
'city1': 1,
'city2': [1,2]
}
#obj=FM() 这样的方式也可以使用:这样的用法用途是,对于认证通过的字段前端会保留客户填写的内容,只会打印认证出错的字段
#obj = FM(initial=dic) 按照字典的方式传输默认值
obj = FM(initial=dic)
return render(request,'fm.html',{'obj': obj})
elif request.method == "POST":
# 获取用户所有数据
# 每条数据请求的验证
# 成功:获取所有的正确的信息
# 失败:显示错误信息
obj = FM(request.POST)
r1 = obj.is_valid()
if r1:
# obj.cleaned_data
models.UserInf.objects.create(**obj.cleaned_data)
else:
# ErrorDict
# print(obj.errors.as_json())
# print(obj.errors['user'][0])
return render(request,'fm.html', {'obj': obj})
return render(request,'fm.html')
#如果程序设计过大!,介意把mode和form分割开来