标签:
作用:
- 验证用户提交的数据
- 生成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.py from django import forms class 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="提交" /> </div> </form> </body> </html>
标签:
原文地址:http://www.cnblogs.com/Z-style/p/5894727.html