Django 钩子验证

钩子验证用于后台对前台用户提交的数据进行验证,一般用于注册和登录等。
本文的钩子验证class UserForm里面的变量要与后台接收到的变量名字相同。

from django import forms  #自动验证 # forms组件
from django.forms import widgets
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from app01.models import Member

class UserForm(forms.Form):
    wid_01 = widgets.TextInput(attrs={"class": "form-control"})#<input type='text' class="form-control">
    wid_02 = widgets.PasswordInput(attrs={"class": "form-control"})#<input type='password' class="form-control">
    user_name=forms.CharField(max_length=60,min_length=3,label="用户名",widget=wid_01,error_messages={"required":"该字段必填"})
    #print(user_name)
    nike_name=forms.CharField(max_length=60,min_length=4,label="显示名称",widget=wid_01,error_messages={"required": "该字段必填"})
    #print(nike_name)
    pwd=forms.CharField(max_length=30,min_length=8,label="密码",widget=wid_02,validators=[RegexValidator('\d+','只能是数字') ],error_messages={'required': '密码不能为空','min_length': '密码长度不能小于8','max_length': '密码长度不能大于18','invalid': '密码格式错误',})
    #print(pwd)
    cpwd=forms.CharField(max_length=30,min_length=8,label="确认密码",widget=wid_02,validators=[RegexValidator('\d+','只能是数字') ],error_messages={'required': '密码不能为空','min_length': '密码长度不能小于8','max_length': '密码长度不能大于18','invalid': '密码格式错误',}) #/(?=.*[a-z])(?=.*\d)(?=.*[#@!~%^&*])[a-z\d#@!~%^&*]{8,16}/i
    #print(cpwd)
    email = forms.EmailField(label="邮箱",widget=wid_01,error_messages={"required":"该字段必填","invalid":"格式不正确"})
    #print(email)
    #allow =forms.CharField(max_length=2,min_length=2,label="昵称")

    # PhoneNum = forms.CharField(max_length=11, widget=wid_01,label="电话号码",)

    # 局部钩子
    def clean_member_name(self):
        val = self.cleaned_data.get("member_name")
        res = Member.objects.filter(member_name=val)
        if not res:
            return val
        else:
            raise ValidationError("用户名已存在!")
    # 全局钩子
    def clean(self):
        member_pwd=self.cleaned_data.get("member_pwd")
        r_pwd=self.cleaned_data.get("r_pwd")
        if member_pwd and r_pwd:
            if member_pwd==r_pwd:
                #print(self.cleaned_data)
                return self.cleaned_data
            else:
                raise ValidationError('两次密码不一致!')
        else:
            return self.cleaned_data

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值