在创建Django表单时,因为需要验证用户输入的验证码是否正确,因此需要在session里提取当前验证码的值和POST提交过来的值进行比对,如图:

 form.py

 from django import forms

 class LoginForms(forms.Form):
check_code = forms.CharField()
def clean_check_code(self):
if self.request.session.get('CheckCode').upper() !=
self.request.POST.get('check_code').upper():
raise ValidationError(message='验证码错误', code='invalid')

但是这样会引发一个AttributeError错误

因为这时的"self.request.session.get('CheckCode')"中的"self.request"指代的是表单forms(我猜的。。。),所以要继承个类BaseForm,然后在BaseForm写上

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

原来代码改为:

 class LoginForms(BaseForm,forms.Form):
check_code = forms.CharField() def clean_check_code(self):
if self.request.session.get('CheckCode').upper() != self.request.POST.get('check_code').upper():
raise ValidationError(message='验证码错误', code='invalid')

然后在view.py上改为:

 from ..forms.account import LoginForms

 def login(request):
if request.method == 'GET':
return render(request, 'login.html') elif request.method == 'POST':
obj = LoginForms(request = request, data = request.POST)
....

最新文章

  1. Bringing Whoops Back to Laravel 5
  2. [LeetCode] Two Sum 两数之和
  3. ActiveMQ初体验(转)
  4. iava多线程详解(2)-成员变量与局部变量访问
  5. CloudStack4.4安装 ubuntu14.04
  6. Openstack Neutron 允许VM流量转发
  7. NGUI 滑动页(UIToggle和UIToggledObjects)
  8. js 获取系统当前时间
  9. python 操作 excel
  10. BeanUtils框架浅析
  11. js中new构造函数的研究
  12. linux高级技巧:rsync同步(一个)
  13. [转]shell awk 入门,中级,高级使用
  14. python 字典详解
  15. windows 安装memchched和memcache教程
  16. JavaSSM框架面试
  17. python day10 函数(第二篇)
  18. JavaScript隐藏的坑一,隐式调用toString
  19. YUICompressor的安装及使用(一)
  20. js基础回顾

热门文章

  1. LeetCode 206. 反转链表(Reverse Linked List) 16
  2. 027 Android 可扩展的listview:ExpandableListView的使用案例
  3. [转帖]什么是UWB?UWB有什么用?
  4. springboot调用mongo
  5. Itemchanged事件
  6. 玩转【Mock.js】,前端也能跑的很溜
  7. C# 不是序列化xml 转实体Model【原家独创】
  8. Spring/Spring Boot整合Weblogic JMS实战
  9. Go net/http 发送常见的 http 请求
  10. Jlink调试S5PV210