博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django组件-forms组件
阅读量:6241 次
发布时间:2019-06-22

本文共 5323 字,大约阅读时间需要 17 分钟。

forms组件

校验字段功能

针对一个实例:注册用户讲解。

模型:models.py

class UserInfo(models.Model):    name=models.CharField(max_length=32)    pwd=models.CharField(max_length=32)    email=models.EmailField()    tel=models.CharField(max_length=32)

模板: register.html:

    
Title
{% csrf_token %}

视图函数:register

# forms组件from django.forms import widgetswid_01=widgets.TextInput(attrs={"class":"form-control"})wid_02=widgets.PasswordInput(attrs={"class":"form-control"})class UserForm(forms.Form):    name=forms.CharField(max_length=32,                         widget=wid_01                         )    pwd=forms.CharField(max_length=32,widget=wid_02)    r_pwd=forms.CharField(max_length=32,widget=wid_02)    email=forms.EmailField(widget=wid_01)    tel=forms.CharField(max_length=32,widget=wid_01)def register(request):    if request.method=="POST":        form=UserForm(request.POST)        if form.is_valid():            print(form.cleaned_data)       # 所有干净的字段以及对应的值        else:            print(form.cleaned_data)       #            print(form.errors)             # ErrorDict : {"校验错误的字段":["错误信息",]}            print(form.errors.get("name")) # ErrorList ["错误信息",]        return HttpResponse("OK")    form=UserForm()    return render(request,"register.html",locals())

渲染标签功能 

渲染方式1

    
Title

注册页面

{% csrf_token %}
{
{ form.name }}
{
{ form.pwd }}
{
{ form.r_pwd }}
{
{ form.email }}

渲染方式2

{% csrf_token %} {% for field in form %}
{
{ field }}
{% endfor %}

渲染方式3

{% csrf_token %} {
{ form.as_p }}

显示错误与重置输入信息功能

视图

def register(request):    if request.method=="POST":        form=UserForm(request.POST)        if form.is_valid():            print(form.cleaned_data)       # 所有干净的字段以及对应的值        else:            print(form.cleaned_data)       #            print(form.errors)             # ErrorDict : {"校验错误的字段":["错误信息",]}            print(form.errors.get("name")) # ErrorList ["错误信息",]        return render(request,"register.html",locals())    form=UserForm()    return render(request,"register.html",locals())

模板

{% csrf_token %} {% for field in form %}
{
{ field }}
{
{ field.errors.0 }}
{% endfor %}

局部钩子与全局钩子

模板

# forms组件from django.forms import widgetswid_01=widgets.TextInput(attrs={"class":"form-control"})wid_02=widgets.PasswordInput(attrs={"class":"form-control"})from django.core.exceptions import ValidationErrorclass UserForm(forms.Form):    name=forms.CharField(max_length=32,                         widget=wid_01                         )    pwd=forms.CharField(max_length=32,widget=wid_02)    r_pwd=forms.CharField(max_length=32,widget=wid_02)    email=forms.EmailField(widget=wid_01)    tel=forms.CharField(max_length=32,widget=wid_01)    # 局部钩子    def clean_name(self):        val=self.cleaned_data.get("name")        if not val.isdigit():            return val        else:            raise ValidationError("用户名不能是纯数字!")    # 全局钩子    def clean(self):        pwd=self.cleaned_data.get("pwd")        r_pwd=self.cleaned_data.get("r_pwd")        if pwd==r_pwd:            return self.cleaned_data        else:            raise ValidationError('两次密码不一致!')def register(request):    if request.method=="POST":        form=UserForm(request.POST)        if form.is_valid():            print(form.cleaned_data)       # 所有干净的字段以及对应的值        else:            clean_error=form.errors.get("__all__")         return render(request,"register.html",locals())    form=UserForm()    return render(request,"register.html",locals())

视图

{% csrf_token %} {% for field in form %}
{
{ field }}
{% if field.label == 'R pwd' %} {
{ clean_error.0 }}
{% endif %} {
{ field.errors.0 }}
{% endfor %}

转载于:https://www.cnblogs.com/qq849784670/p/9907273.html

你可能感兴趣的文章
NPOI导出模板样式
查看>>
jsp请求由servlet响应的方式
查看>>
16 款最流行的 JavaScript 框架
查看>>
使用awrextr.sql导出awr原始数据
查看>>
分享一次失败的项目实践经验
查看>>
jedispool 连 redis
查看>>
PadLeft 补零
查看>>
注意了,99%通过天天特价的技巧!
查看>>
iOS H5容器的一些探究(一):UIWebView和WKWebView的比较和选择
查看>>
activity启动模式
查看>>
如何将页面设置为微信端才能打开
查看>>
centos7如何关闭防火墙
查看>>
iOS开发中你是否遇到这些经验问题
查看>>
cellery ImportError & AttributeError
查看>>
正则表达式
查看>>
算法实验题 5.1 湖泊
查看>>
【235】Win10-Chrome 临时视频文件夹
查看>>
MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回...
查看>>
Spring泛型依赖注入
查看>>
加速scp传输速度
查看>>