美文网首页
用户登陆(form写法)

用户登陆(form写法)

作者: 两点半的杂货铺 | 来源:发表于2018-03-10 12:44 被阅读146次
  • 常用的函数

  • from django.core.validators import RegexValidator用来写正则的
  • from django.core.exceptions import ValidationError用来捕获clean异常的
  • from django import forms 用来继承的
  • from django.forms import fields 用来调用字段的
  • from django.forms import widgets 用来引入页面插件的
  • 注意点

  • 验证码判断

首先我们将验证是储存在session中,而session是在request中,这里我们需要构造一个继承的函数,给我们form表单函数加入一个属性

class Base(object):
    def __init__(self,request,*args,**kwargs):
        self.request = request
        super(Base,self).__init__(*args,**kwargs)

一、思路

  • 用clean判断用户名密码是否正确
  • 首先去数据库查用户名密码是否存在
  • 如果不存在raise ValidationError('用户名密码错误')捕获异常
  • 如果存在判断用户是否勾选持久登陆状态
  • 未勾选时我们在写session最好给session一个钥匙,在吧session分装
self.request.session['is_login'] = True
self.request.session['userinfo'] = obj_login
  • 勾选了就给对应的session赋值
 def clean(self):
        username = self.cleaned_data['username']
        password = self.cleaned_data['password']
        check_box = self.cleaned_data['check_box']
        obj_login = models.UserInfo.objects.\
            filter(username=username,password=password).\
            values('nickname','email','avatar').first()
        if not obj_login:
            raise ValidationError('用户名密码错误')
        else:
            self.request.session['is_login'] = True
            self.request.session['userinfo'] = obj_login
            print('未勾选',check_box)
            if check_box:
                print(check_box)
                self.request.session.set_expiry(60 * 60 * 24 * 7)
        return self.cleaned_data
  • 用clean_name 判断验证码是否正确

整体的代码

class loginform(Base,forms.Form):
    username = fields.CharField(
        error_messages={'required':'请输入用户名'},
        widget = widgets.TextInput(attrs={'class':"form-first-name form-control"})
    )
    password = fields.CharField(
        error_messages={'required':"请输入密码"},
        widget = widgets.PasswordInput(attrs={'class': "form-last-name form-control"})
    )
    check_code = fields.CharField(
        error_messages={'required': "请输入验证码"},
    )
    check_box = fields.CharField(
        required=False,
        widget = widgets.CheckboxInput({'value':"0"})
    )
    def clean_check_code(self):
        v = self.cleaned_data['check_code']
        if self.request.session.get('CheckCode').upper() != v.upper():
            raise ValidationError('验证码错误')
        return v

    def clean(self):
        username = self.cleaned_data['username']
        password = self.cleaned_data['password']
        check_box = self.cleaned_data['check_box']
        obj_login = models.UserInfo.objects.\
            filter(username=username,password=password).\
            values('nickname','email','avatar').first()
        if not obj_login:
            raise ValidationError('用户名密码错误')
        else:
            self.request.session['is_login'] = True
            self.request.session['userinfo'] = obj_login
            print('未勾选',check_box)
            if check_box:
                print(check_box)
                self.request.session.set_expiry(60 * 60 * 24 * 7)
        return self.cleaned_data

相关文章

网友评论

      本文标题:用户登陆(form写法)

      本文链接:https://www.haomeiwen.com/subject/dayyfftx.html