Django中的forms组件实例详解
Form介绍
我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。
与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。
Djangoform组件就实现了上面所述的功能。
总结一下,其实form组件的主要功能如下:
- 生成页面可用的HTML标签
- 对用户提交的数据进行校验
- 保留上次输入内容
先在应用目录下my_forms.py定义好一个UserForm类
fromdjangoimportforms fromdjango.formsimportwidgets classUserForm(forms.Form): username=forms.CharField(min_length=4,label='用户名', widget=widgets.TextInput(attrs={"class":"form-control"}), error_messages={ "required":"用户名不能为空", }) pwd=forms.CharField(min_length=4,label='密码', error_messages={ "required":"密码不能为空", }, widget=widgets.PasswordInput(attrs={"class":"form-control"})) r_pwd=forms.CharField(min_length=4,label='确认密码', widget=widgets.PasswordInput(attrs={"class":"form-control"}), error_messages={ "required":"密码不能为空", }) email=forms.EmailField(label='邮箱', widget=widgets.EmailInput(attrs={"class":"form-control"}), error_messages={ "required":'邮箱不能为空', "invalid":"邮箱格式错误", }) tel=forms.CharField(label='手机号', widget=widgets.TextInput(attrs={"class":"form-control"}), )
再写一个视图函数:
在写一个视图函数
defreg(request): form=UserForm() ifrequest.method=="POST": print(request.POST) #实例化form对象的时候,把post提交过来的数据直接传进去 form=UserForm(request.POST)#form表单的name属性值应该与forms组件的字段名称一致 ifform.is_valid(): print(form.cleaned_data) returnHttpResponse('注册成功') returnrender(request,'reg.html',locals())
login.html
注册 传统form表单
{%csrf_token%} 用户名:
密码:
确认密码:
邮箱:
手机号:
forms组件渲染方式1
{%csrf_token%} {{form.username.label}}:{{form.username}}{{form.username.errors.0}}
密码:{{form.pwd}} {{form.pwd.errors.0}}
确认密码:{{form.r_pwd}} {{form.r_pwd.errors.0}}
邮箱:{{form.email}} {{form.email.errors.0}}
手机号:{{form.tel}} {{form.tel.errors.0}}
forms组件渲染标签方式2
{%csrf_token%} {%forfieldinform%} {{field.label}} {{field}} {{field.errors.0}} {%iffield.name=='r_pwd'%} {{errors.0}} {%endif%}