首页 > 代码库 > 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进阶
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。