码迷,mamicode.com
首页 > 其他好文 > 详细

Django进阶

时间:2016-09-22 06:27:37      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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.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>

 

Django进阶

标签:

原文地址:http://www.cnblogs.com/Z-style/p/5894727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!