• django form表单验证


    简单例子:

     1 #自定义验证类
     2 class Check_form1(forms.Form):
     3            #user就是要验证的字段,这里对应前端name <input type='text' name=user>
     4            user = fields.CharField()
     5            pwd  = fields.CharField()
     6            email = fields.EmailField()
     7 
     8 
     9 
    10 def test_form1(request):
    11     if request.method == 'GET':
    12          return render(request,'form1.html')
    13 
    14     elif request.method == 'POST':
    15            obj = Check_form(request.POST)
    16 
    17            #obj.is_valid()表单验证,全通过返回True,有错误就false
    18            result = obj.is_valid()
    19            if result:
    20 
    21                #{'pwd': u'12311', 'user': u'12311', 'email': u'123@11.com'}
    22                print(obj.cleaned_data)
    23            else:
    24                #打印错误字段
    25                #如:<ul class="errorlist"><li>pwd<ul class="errorlist"><li>最小4位</li></ul></li></ul>
    26                #返回json格式错误:obj.errors.as_json() 
    27                # {"pwd": [{"message": "u6700u5c0f4u4f4d", "code": "min_length"}]}
    28                print(obj.errors)
    29     return  HttpResponse("ok")
    views.py
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 
     9 <form action="/test_form1/"method="post">
    10      {% csrf_token %}
    11      <p> <input type="text" name="user"></p>
    12      <p> <input type="text" name="pwd"></p>
    13      <p> <input type="text" name="email"></p>
    14      <input type="submit" value="提交" />
    15 </form>
    16 
    17 
    18 </body>
    19 </html>
    html

    阶级例子:

     1 #自定义验证类
     2 class Check_form1(forms.Form):
     3            user = fields.CharField()
     4            pwd  = fields.CharField()
     5            email = fields.EmailField()
     6 
     7 class Check_form(forms.Form):
     8 
     9     #user就是要验证的字段,这里对应前端name <input type='text' name=user>,django中在前端也可以不写原生格式
    10     #widget=widgets.Textarea格式插件,默认text改成了Textarea
    11     user = fields.CharField(
    12         error_messages={'required':'用户名不能为空'},
    13         widget=widgets.Textarea(attrs={'class':'a1','divclass':'xxxxx'})
    14     )
    15     #max_length大于12,min_length小于4
    16     #error_messages错误信息默认是英文的,'required'就是为空,'max_length'字段超过12的,'min_length'字段小于4
    17     pwd  = fields.CharField(
    18         max_length=12,
    19         min_length=4,
    20         error_messages={'required':'密码不能为空','max_length':'最大12位','min_length':'最小4位'},
    21         widget=widgets.PasswordInput
    22     )
    23 
    24     #'invalid'格式错误
    25     email = fields.EmailField(
    26         error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'},
    27         widget=widgets.EmailInput
    28     )
    29 
    30 
    31 def test_form(request):
    32     if request.method == 'GET':
    33          #get方式求情这里的类就不需要传递参数了
    34          obj = Check_form()
    35          return render(request,'form.html',{'obj':obj})
    36 
    37     elif request.method == 'POST':
    38         #获取用户所有数据
    39         #每条数据请求的验证
    40         #成功或失败都显示信息
    41 
    42         #将post的数据传给Check_form类
    43         obj = Check_form(request.POST)
    44         #验证表单数据
    45         result = obj.is_valid()
    46 
    47         if result:
    48             #obj.cleaned_data这个格式{'pwd': u'12345', 'user': u'123', 'email': u'asd@qq.com'}
    49             #这样就可以直接存储到数据库了xxx(**obj.cleaned_data)
    50             print(obj.cleaned_data)
    51         else:
    52             #错误格式<ul class="errorlist"><li>pwd<ul class="errorlist"><li>最小4位</li></ul></li><li>email<ul class="errorlist"><li>邮箱不能为空</li></ul></li></ul>
    53             print(obj.errors)
    54 
    55             #json格式输出错误
    56             #print(obj.errors.as_json())
    57 
    58             #打印user字段的具体错误
    59             #print(obj.errors['user'][0])
    60 
    61             return render(request,'form.html',{'obj':obj})
    62         return render(request,'form.html',{'obj':obj})
    views
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 
     9 <form action="/test_form/"method="post">
    10      {% csrf_token %}
    11      <p> {{ obj.user }}  {{ obj.errors.user.0 }}</p>
    12      <p> {{ obj.pwd }}   {{ obj.errors.pwd.0 }}</p>
    13      <p> {{ obj.email }} {{ obj.errors.email.0 }}</p>
    14      <input type="submit" value="提交" />
    15 </form>
    16 
    17 
    18 <h1>obj.as_table方式</h1>
    19 <form action="/test_form/"method="post">
    20      {% csrf_token %}
    21      <!-- 必须自己写table -->
    22      <table>
    23          {{ obj.as_table }}
    24      </table>
    25 </form>
    26 
    27 
    28 <h1>obj.as_p方式</h1>
    29 <form action="/test_form/"method="post">
    30      {% csrf_token %}
    31      {{ obj.as_p }}
    32 </form>
    33 
    34 
    35 <h1>obj.as_ul方式</h1>
    36 <form action="/test_form/"method="post">
    37      {% csrf_token %}
    38      {{ obj.as_ul }}
    39 </form>
    40 
    41 </body>
    42 </html>
    html
  • 相关阅读:
    CloudFlare CDN折腾记-优化设置
    验证 Googlebot (检查是否为真的Google机器人)
    (C#) SQLite数据库连接字符串
    Xamarin.iOS开发初体验
    Windows平台下利用APM来做负载均衡方案
    cloudflare的NS服务器地址
    CloudFlare Support
    菜刀php过waf
    opencv3寻找最小包围矩形在图像中的应用-滚动条
    【教程】如何修改路由表?
  • 原文地址:https://www.cnblogs.com/menkeyi/p/7157948.html
Copyright © 2020-2023  润新知