ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

django----利用Form 实现两次密码输入是否一样 ( 局部钩子和全局钩子 )

2019-03-30 15:49:11  阅读:277  来源: 互联网

标签:Form get 钩子 self django forms cleaned password data


from django import forms  # 导入表单模块
from django.core.exceptions import ValidationError
 
class RegisterForm(forms.Form): # 自定义表单类,并继承forms.Form
  email = forms.EmailField(widget=forms.EmailInput(
      attrs={"class": "form-control"}))
 
  username = forms.CharField(min_length=4, max_length=12, widget=forms.TextInput(
      attrs={"class": "form-control"}))
 
  password = forms.CharField(min_length=6, widget=forms.PasswordInput(
      attrs={"class": "form-control"}))
 
  password2 = forms.CharField(min_length=6, widget=forms.PasswordInput(
      attrs={"class": "form-control"}))
 
  valid_code = forms.CharField(widget=forms.TextInput(
      attrs={"class": "form-control"}))
 
  def __init__(self, request, *args, **kwargs):
      # 如果需要额外接收参数,要重写构造器函数
      # 这里额外接收一个参数,用于从request.sesssion中提取之前保存的验证码
      super(RegisterForm,self).__init__(*args, **kwargs)
      self.request = request
 
  # 自定义方法(局部钩子),密码必须包含字母和数字
  def clean_password(self):
      if self.cleaned_data.get('password').isdigit() or self.cleaned_data.get('password').isalpha():
          raise ValidationError('密码必须包含数字和字母')
      else:
          return self.cleaned_data['password']
 
  def clean_valid_code(self):  # 检验验证码正确;之前生成的验证码保存在了了session中
      if self.cleaned_data.get('valid_code').upper() == self.request.session.get('valid_code'):
          return self.cleaned_data['valid_code']
      else:
          raise ValidationError('验证码不正确')
 
  # 自定义方法(全局钩子, 检验两个字段),检验两次密码一致;
  def clean(self):
      if self.cleaned_data.get('password') != self.cleaned_data.get('password2'):
          raise ValidationError('密码不一致')
      else:
          return self.cleaned_data
 
  # 注意,上面的字典取值用get, 因为假如在clean_password中判断失败,那么没有返回值,最下面的clean方法直接取值就会失败s 

  

标签:Form,get,钩子,self,django,forms,cleaned,password,data
来源: https://www.cnblogs.com/yanxiaoge/p/10627582.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有