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 

  

最新文章

  1. acm系统开发笔记
  2. HDP 2.3 Notes
  3. Windows 10 周年版尝鲜
  4. javascript - DOM对象控制HTML元素详解
  5. php 图片处理类
  6. iOS项目重构日记
  7. Tencent 的电话面试
  8. POJ3087Shuffle'm Up(map)
  9. Spring execution 表达式
  10. SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)
  11. 服务管理——ntp
  12. dojo 学习笔记
  13. Chapter 2 Open Book——36
  14. python中从文件中读取数据
  15. ios MVVM实践 刷新网络请求+tableView展示数据
  16. ORM版学员管理系统 3
  17. luogu3953 [NOIp2017]逛公园 (tarjan+dijkstra+记忆化搜索)
  18. ModBus通信协议的【主从模式】
  19. CI/CD系列
  20. delphi中Case语法的使用方法

热门文章

  1. linux 文件处理命令
  2. Redis安装完后redis-cli无法使用(redis-cli: command not found)
  3. Web方面的错误, 异常来自hresult:0x80070057(E_INVALIDARG)
  4. Debian 9 strech 安装 ROS lunar
  5. CF1108F MST Unification
  6. Linux iptables防火墙
  7. c++学习day2
  8. CF55D: Beautiful Number
  9. 如何保障Web应用安全性
  10. appium+java(七)图片的放到及缩小操作