Django的Form:
1、对用户请求的验证
2、生成HTML代码
a、创建一个类
b、类中创建字段(包含正则表达式)
c、Get
a) Obj = Fr()
obj.user=> 自动生成HTML
d、POST
a) Obj = Fr(request,POST)
i. If obj.is_valid():
Obj.cleaned_data
Else:
Obj.errors
Return .....obj
1、Form的使用
from django.shortcuts import render, HttpResponse
from django import forms
from django.forms import fields
from django.forms import widgets
class TestForm(forms.Form):
user=fields.CharField(
required=True, #是否必填
max_length=12, #最大长度
min_length=3, #最小长度
error_messages={
'required':'用户名不能为空',
'max_length':'太长了',
'min_length':'太短了',
}, #错误提示
# widget=widgets.Select(), #定制HTML插件
label='用户名',
initial='xx',
help_text='helptext',
# show_hidden_initial=True,
# validators=[], #自定制验证规则
# disabled=False,
label_suffix='->',
)
age=fields.IntegerField(
label='年龄',
max_value=12,
min_value=5,
)
email=fields.EmailField(
label='邮箱',
)
img=fields.ImageField()
city=fields.ChoiceField(
choices=[(1,'北京'),(2,'上海'),(3,'深圳')],
initial=3, #默认值
)
city2=fields.CharField(
widget=widgets.Select(choices=[(1,'北京'),(2,'上海'),(3,'深圳')])
)
city3 = fields.IntegerField(
widget=widgets.Select(choices=[(1, '北京'), (2, '上海'), (3, '深圳')])
)
hobby=fields.MultipleChoiceField(
choices=[(1,'跑'),(2,'跳'),(3,'游'),(4,'飞')],
initial=[1,3,4],
)
anotherCity=fields.TypedChoiceField(
coerce=lambda x:int(x), # 设置coerce函数,将输出的值转换成需要的类型
choices=[(1, '北京'), (2, '上海'), (3, '深圳')],
initial=3, # 默认值
)
fp=fields.FilePathField(
path='app01'
)
def test(request):
if request.method=='GET':
obj=TestForm()
return render(request,'test.html',{'obj':obj})
else:
obj=TestForm(request.POST,request.FILES)
obj.is_valid()
print(obj.cleaned_data)
return render(request,'test.html',{'obj':obj})
<body>
<form action="/test/" method="post" novalidate enctype="multipart/form-data">
<p>{{ obj.user.label }}{{ obj.user }}</p>
<p>{{ obj.age.label }}{{ obj.age }}{{ obj.errors.age.0 }}</p>
<p>{{ obj.email.label }}{{ obj.email }}</p>
<p>{{ obj.img.label }}{{ obj.img }}</p>
<p>{{ obj.city.label }}{{ obj.city }}</p>
<p>{{ obj.city2.label }}{{ obj.city2 }}</p>
<p>{{ obj.city3.label }}{{ obj.city3 }}</p>
<p>{{ obj.hobby.label }}{{ obj.hobby }}</p>
<p>{{ obj.anotherCity.label }}{{ obj.anotherCity }}</p>
<p>{{ obj.fp.label }}{{ obj.fp }}</p>
<input type="submit" value="提交">
</form>
</body>
form元素的novalidate标识:取消浏览器对数据的验证,交由后台验证数据。
models.UserInfo.objects.create(fm_obj.cleaned_data)