首页 > 代码库 > Django进阶

Django进阶

Form表单认证

 

作用:

  - 验证用户提交的数据
  - 生成HTML标签

在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁用掉但是还是存在风险)。所以我们一般做两种认证一种是前端做一遍认证,在后端做一遍认证。

#/usr/bin/env python#-*- coding:utf-8 -*-from django.shortcuts import render# Create your views here.def user_list(request):host = request.POST.get(‘host‘)port = request.POST.get(‘port‘)mail = request.POST.get(‘mail‘)mobile = request.POST.get(‘mobile‘)#这里有个问题,如果,这个from表单有20个input,你在这里是不是的取20次?#验证:#输入不能为空,并且有的可以为空有的不可以为空#如果email = 11123123 这样合法吗?#如果mobile = 11123123 这样合法吗?#如果ip = 11123123 这样合法吗?‘‘‘你在这里是不是需要做一大堆的输入验证啊?并且有很多这种页面会存在这种情况,如果每个函数都这样做估计就累死了‘‘‘return render(request,‘user_list.html‘)

用form就可以解决这个问题,其他语言也叫作模型绑定。

views.pyfrom django import formsclass LoginForm(forms.Form):    user = forms.CharField(required=True, error_messages={‘required‘: ‘用户名不能为空.‘})    pwd = forms.CharField(required=True,      #默认为true,代表不能为空                          min_length=6,      #最小长度                          max_length=10,   #最大长度                          error_messages={‘required‘: ‘密码不能为空.‘, ‘min_length‘: "至少6位"})    num = forms.IntegerField(error_messages={‘required‘: ‘数字不能空.‘,‘invalid‘: ‘必须输入数字‘})    phone = forms.CharField(validators=[mobile_validate, ],)    test_choices = (        (0, ‘上海‘),        (1, ‘背景‘),    )    test = forms.IntegerField(widget=forms.Select(choices=test_choices))def login(request):    if request.POST:        objPost = LoginForm(request.POST)        ret = objPost.is_valid()     #判断用户输入是否合法        if ret:            print(objPost.clean())        else:            from django.forms.utils import ErrorDict            #print(type(obj.errors),obj.errors.as_json())            print(‘aaaaaaaaaaaaaaaaaaaa‘)        return render(request, ‘login.html‘,{‘obj1‘: objPost})    else:        objGet = LoginForm()        return render(request, ‘login.html‘,{‘obj1‘: objGet})
login.html<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title></title>    <style>        .error-msg{            color: red;        }    </style></head><body>    <form action="/login/" method="POST">        <div>            <div>               {{ obj1.user }}                {% if  obj1.errors.user %}                    <span class="error-msg">{{ obj1.errors.user.0 }}</span>                {% endif %}            </div>            <div>                {{ obj1.pwd }}                <span class="error-msg">{{ obj1.errors.pwd.0 }}</span>            </div>            <div>                {{ obj1.num }}                <span class="error-msg">{{ obj1.errors.num.0 }}</span>            </div>            <div>                {{ obj1.phone }}                <span class="error-msg">{{ obj1.errors.phone.0 }}</span>            </div>            <div>                {{ obj1.test }}                <span class="error-msg">{{ obj1.errors.test.0 }}</span>            </div>            <input type="submit" value="http://www.mamicode.com/提交" />        </div>    </form></body></html>

 

Django进阶