Python Web框架之Django框架Form组件用法详解
本文实例讲述了PythonWeb框架之Django框架Form组件用法。分享给大家供大家参考,具体如下:
Form简介
在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传、如何接收。
访问网站时,表单可以实现客户端与服务器之间的通信。例如查询,就用到了表单(其属性中,action=get)。
再比如说注册与登陆,也是要用到表单的。但这里由于涉及到隐私问题,需要保证数据传输的安全性,因此其传输方法就应当使用post而非get。
总之,对客户端来说,表单就是用来向服务器提交数据的;
而对服务器来说,表单就是你提供给客户端的发送信息的渠道,你需要对用户发送来的信息进行处理和响应,以达到页面的交互。
DjangoForm的功能
- 生成HTML标签
- 验证用户数据(显示错误信息)
- HTMLForm提交保留上次提交数据
- 初始化页面显示内容
DjangoForm验证流程
用于验证用户请求数据合法性的一个组件
如果没有Form就得繁琐地用正则表达式了
a.用户提交数据的验证
1、创建模版classLoginForm(forms.Form):...
2、将请求交给模版,创建一个对象obj=LoginForm(request.POST)
3、进行验证obj.is_valid()
4、获取正确信息obj.clean()
5、获取错误信息obj.errors
b.错误信息提示
Form提交,刷新页面的特性,模版对象内部值丰富,再显示时,值和错误信息都有
c.保留上一次提交的数据
1、自动生成html标签
2、保留上一次提交的数据
Form的创建
fromdjango.shortcutsimportrender,redirect
fromdjangoimportforms
#这里为了简单,把form类写到视图函数
#模版
classLoginForm(forms.Form):
#模版中的元素
user=forms.CharField(min_length=6,error_messages={"required":'用户名不能为空','min_length':'用户名长度不能小6'})
email=forms.EmailField(error_messages={"required":'邮箱不能为空','invalid':'邮箱格式错误'})
deflogin(request):
ifrequest.method=="GET":
#数据库中获取
obj=LoginForm()
returnrender(request,'login.html',{'oo':obj})
elifrequest.method=="POST":
"""
obj=LoginForm(request.POST)
#验证
status=obj.is_valid()
print(status)
value_dict=obj.clean()验证成功的值,输入格式正确的拿到了
print(value_dict)
#error_obj=obj.errors
error_obj=obj.errors.as_json()
print(error_obj)code定义错误信息
"""
obj=LoginForm(request.POST)
ifobj.is_valid():
value_dict=obj.clean()
print(value_dict)
#create(**value_dict)
else:
#封装了所有的错误信息
#error_obj=obj.errors
#print(obj.errors['email'][0],type(error_obj['email'])
#print(obj.errors['email'][0],type(error_obj['email'][0])
#print(obj.errors["user"][0])
#print(type(error_obj))
fromdjango.forms.utilsimportErrorDict
pass
returnrender(request,'login.html',{'oo':obj})
当然你也可以在app里创建form.py文件,在里面创建类:
下文将使用这个文件。
fromdjangoimportformsasDForms
fromdjango.formsimportfields
fromdjango.formsimportwidgets
fromdjango.core.validatorsimportRegexValidator
classDetailForm(DForms.Form):
user1=fields.CharField()#默认input框,可以改成select,radio等
user2=fields.CharField(widget=widgets.TextInput)
user4=fields.IntegerField()
#字符串
user3=fields.ChoiceField(choices=[(1,'SH'),(2,'BJ'),])
user5=fields.CharField(
widget=widgets.Select(choices=[(1,'SH'),(2,'BJ'),])
)
user6=fields.IntegerField(
widget=widgets.Select(choices=[(1,'SH'),(2,'BJ'),])
)
user7=fields.IntegerField(
widget=widgets.RadioSelect(choices=[(1,'SH'),(2,'BJ'),])
)
#{'user1':'11','user2':'22','user4':33,'user3':'1','user5':'2','user6':1,'user7':2}
视图函数:
fromdjango.shortcutsimportrender,redirect
fromapp01importforms
defdetail(request):
obj=forms.DetailForm(request.POST)
obj.is_valid()
print(obj.clean())
returnrender(request,'detail.html',{'obj':obj})
生成HTML:
Title {{obj.user1}} {{obj.user2}} {{obj.user3}} {{obj.user4}} {{obj.user5}} {{obj.user6}} {{obj.user7}}