Form 书写方式 验证用户请求 生成html标签 主机管理系统
Form
用途
- 验证用户请求
- 生成html标签
- 保留上一次提交的数据
书写方式
- 写类
- 在类中写字段(校验)
- 在类中写插件(生成HTML),html上写模板语言
- 在函数中,配置初始化操作
验证用户请求
views.py
from django import forms
# 字段本身仅能验证
from django.forms import fields
# 定制插件、定制样式
from django.forms import widgets
class FM(forms.Form):
user = fields.CharField(
error_messages={'required': '用户名不能为空.'},
widget=widgets.Textarea(attrs={'class': 'c1'}),
label='用户名',
initial='root'
)
pwd = fields.CharField(
max_length=12,
min_length=6,
error_messages={'required': '密码不能为空.', 'min_length': '密码长度不能小于6',
"max_length": '密码长度不能大于12'},
widget=widgets.PasswordInput
)
email = fields.EmailField(
error_messages={'required': '邮箱不能为空.', 'invalid': "邮箱格式错误"})
f = fields.FileField()
p = fields.FilePathField(path='app01')
city1 = fields.ChoiceField(
choices=[(0, '上海'), (1, '广州'), (2, '东莞')]
)
city2 = fields.MultipleChoiceField(
choices=[(0, '上海'), (1, '广州'), (2, '东莞')]
)
def fm(request):
if request.method == 'GET':
# 从数据库中获取数据到字典
dic = {
"user": 'r1',
'pwd': '123123',
'email': 'sdfsd',
'city1': 1,
'city2': [1,2]
}
# 初始化操作
obj = FM(initial=dic)
return render(request, 'fm.html', {'obj': obj})
elif request.method == 'POST':
obj = FM(request.POST)
if obj.is_valid(): 判断信息是否正确,正确为True,否则为Flase
# 认证通过后的操作
models.UserInf.objects.create(**obj.cleaned_data) 正确信息,字典形式
else:
# 错误信息的几种显示形式
print(obj.errors) 错误信息,继承ErrorDict
print(obj.errors.as_json()) json字典形式
print(obj.errors['user']) 通过字典方式获取
print(obj.errors['user'][0]) 获取第一个错误信息
return render(request, 'fm.html', {'obj': obj})
return redirect('/fm/')
ulrs.py
url(r'^fm/', views.fm),
fm.html
<form method="post" action="/fm/">
{% csrf_token %}
<p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
<p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
<p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
<p>{{ obj.f }}{{ obj.errors.f.0 }}</p>
{{ obj.p }}
{{ obj.city1 }}
{{ obj.city2 }}
<input type="submit" value="提交"/>
</form>
<form method="post" action="/fm/">
{% csrf_token %}
<p><input type="text" name="user" placeholder="用户名">{{ obj.errors.user.0 }}</p>
<p><input type="text" name="pwd" placeholder="密码">{{ obj.errors.pwd.0 }}</p>
<p><input type="text" name="email" placeholder="邮箱">{{ obj.errors.email.0 }}</p>
<input type="submit" value="提交"/>
</form>
生成html标签
可定制高,推荐
<form method="post" action="/fm/">
{% csrf_token %}
<p>{{ obj.user }}{{ obj.errors.user.0 }}</p>
<p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
<p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
<input type="submit" value="提交"/>
</form>
自动生成,可定制性差
<form method="post" action="/fm/">
{% csrf_token %}
{{ obj.as_ul }}
<input type="submit" value="提交"/>
</form>
<form method="post" action="/fm/">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交"/>
</form>
<form method="post" action="/fm/">
{% csrf_token %}
<table>
{{ obj.as_table }}
</table>
<input type="submit" value="提交"/>
</form>