关于创建Django表单Forms继承BaseForm的问题

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

 1 form.py
 2
 3 from django import forms
 4
 5 class LoginForms(forms.Form):
 6      check_code = forms.CharField()
 7      def clean_check_code(self):
 8         if self.request.session.get(‘CheckCode‘).upper() !=
 9             self.request.POST.get(‘check_code‘).upper():
10             raise ValidationError(message=‘验证码错误‘, code=‘invalid‘)

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

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

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

原来代码改为:

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

然后在view.py上改为:

1 from ..forms.account import LoginForms
2
3 def login(request):
4     if request.method == ‘GET‘:
5         return render(request, ‘login.html‘)
6
7     elif request.method == ‘POST‘:
8         obj = LoginForms(request = request, data = request.POST)
9         ....

原文地址:https://www.cnblogs.com/linyuhong/p/9490790.html

时间: 2024-10-11 11:04:03

关于创建Django表单Forms继承BaseForm的问题的相关文章

django表单使用forms.ModelForm

win7 python2.7 django 1.6.5 因为使用数据库sqlite,项目中有models.py,所以使用方便的forms.ModelForm处理表单. 上传图像文件使用默认的defaultstorage. 1.settings.py里增加两行media的定义: #Media MEDIA_ROOT = 'e:/Depot/media' MEDIA_URL = '/media/' 2.models.py #coding: utf8 from django.db import mode

7Python全栈之路系列之Django表单

Python全栈之路系列之Django表单 从Request对象中获取数据 HttpRequest对象包含当前请求URL的一些信息: 熟悉/方法 描述 例如 request.path 除域名以外的请求路径 /hello/ request.get_host() 访问的域名 127.0.0.1:8000" or www.example.com request.get_full_path() 请求路径,可能包含查询字符串 /hello/?print=true request.is_secure() 是

Django表单处理

我们会从手工打造一个简单的搜索页面开始,看看怎样处理浏览器提交而来的数据.然后我们开始使用Django的forms框架. 搜索 在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务.几乎每个网站都有很大的比例访问量来自这两个搜索引擎.甚至,一个网站是否成功取决于其站内搜索的质量.因此,在我们这个网站添加搜索功能看起来好一些. 开始,在URLconf (mysite.urls)添加搜索视图.添加类似(r'^search/$','mysit

Django表单——概述

参考文献: https://docs.djangoproject.com/zh-hans/2.0/topics/forms/ HTML 表单 一个表单必须明确两个要素: where: 应返回与用户输入相对应的数据的URL how:应该返回数据的HTTP方法 GET和POST GET和POST是处理表单时唯一使用的HTTP方法. 使用POST方法返回Django的登录表单,其中浏览器捆绑表单数据,对其进行编码以进行传输,将其发送到服务器,然后接收其响应. 相反,GET将提交的数据捆绑成一个字符串,

Django表单API详解

声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑定,则无法进行验证(因为没有数据可以验证!),但它仍然可以以HTML形式呈现空白表单. 表单类原型:class Form[source] 若要创建一个未绑定的Form实例,只需简单地实例化该类: f = ContactForm() 若要绑定数据到表单,可以将数据以字典的形式传递给Form类的构造函数

Laravel教程 六:表单 Forms

Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate/html. 出现问题先看评论. 在开始之前,我们把界面先美化一点点先: 首先到https://github.com/JellyBool/blog-css-js得到静态文件,然后分别修改下面三个文件: 1. app.blade.php 2. articles/index.blade.php 3. a

Drupal创建自定义表单,上传文件代码

Drupal中创建自定义表单,用来上传文件,对上传文件做一些操作.以下是放在Module中的代码: 一.菜单建立表单路径 /** Implementation of hook_menu(). */ function moduleName_menu () { $items = array(); $items['admin/import'] = array( 'title' => 'title', 'page callback' => 'drupal_get_form', 'page argume

如何创建XHTML表单

首先奉上本菜曾经的作业--一张模仿智联招聘中的注册表单.虽然没有加样式显得很难看,但表单的基本要素已经具备了. 接下来进入正文,开始介绍各表单元素 form标签: 在创建表单时,第一步就是form标签.之后在form里添加各种你想要的表单元素.虽说不用form一样可以创建一个可以看的表单,但之后涉及到提交数据时就必须要用到form了. method为提前方式,有get和post两种,相比之下post更安全可靠,因为get方式会将用户填写的信息附在访问地址之后,具体原因之后的博文会更详细的阐述.

用JS动态创建登录表单,报了个小错误

后来发现原来是: dvObj.style.border='#Red 1px sold'; 其中的Red多谢了一个‘#’, 但是奇怪的是在chrome和firefox都备有报错,但是在ie中报错了. 各位仁兄美眉们一定要小心了额. 下面是这段js动态创建登录框的js代码: 1 onload = function () { 2 var dvObj = document.createElement('div'); 3 dvObj.style.border = 'Red 1px solid'; 4 dv