Django 表单向导和 recaptcha

2024-03-23

我使用以下命令进行了验证码集成Django 片段 http://www.djangosnippets.org/snippets/1653/

settings.py

    RECAPTCHA_PUBLIC_KEY = '<your public key>'
    RECAPTCHA_PRIVATE_KEY = '<your private key>'


#widgets.py

    from django import forms
    from django.utils.safestring import mark_safe
    from django.conf import settings
    from recaptcha import captcha

    class ReCaptcha(forms.widgets.Widget):
    recaptcha_challenge_name = 'recaptcha_challenge_field'
    recaptcha_response_name = 'recaptcha_response_field'

    def render(self, name, value, attrs=None):
        return mark_safe(u'%s' % captcha.displayhtml(settings.RECAPTCHA_PUBLIC_KEY))

    def value_from_datadict(self, data, files, name):
        return [data.get(self.recaptcha_challenge_name, None), 
        data.get(self.recaptcha_response_name, None)]


#fields.py

    from django.conf import settings
    from django import forms
    from django.utils.encoding import smart_unicode
    from django.utils.translation import ugettext_lazy as _

    from marcofucci_utils.widgets import ReCaptcha
    from recaptcha import captcha

    class ReCaptchaField(forms.CharField):
    default_error_messages = {
        'captcha_invalid': _(u'Invalid captcha')
    }

    def __init__(self, *args, **kwargs):
        self.widget = ReCaptcha
        self.required = True
        super(ReCaptchaField, self).__init__(*args, **kwargs)

    def clean(self, values):
        super(ReCaptchaField, self).clean(values[1])
        recaptcha_challenge_value = smart_unicode(values[0])
        recaptcha_response_value = smart_unicode(values[1])
        check_captcha = captcha.submit(recaptcha_challenge_value, 
        recaptcha_response_value, settings.RECAPTCHA_PRIVATE_KEY, {})
        if not check_captcha.is_valid:
        raise forms.util.ValidationError(self.error_messages['captcha_invalid'])
        return values[0]


#forms.py

    class RegistrationForm(forms.Form):
    ...
    recaptcha = marcofucci_fields.ReCaptchaField()
    ...

但是我在 django 表单向导中定义了表单,并且它在字段上调用 ​​clean 方法两次,即使验证码包含在最后一个表单中。

如下:

    from registration.forms import RegistrationWizard,RegistrationForm,ProfileForm

    url(r'^register/$',
        RegistrationWizard([RegistrationForm,ProfileForm]),
        name='register_wizard'),

我该如何规避这种情况。为什么需要在最后一个表单上调用 clean 两次?


如果表单已绑定,则在渲染时它将始终调用 clean (即使您不调用 form.is_valid )。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 表单向导和 recaptcha 的相关文章

随机推荐

  • 构造函数调用顺序与组合

    我有A类和B类 C 类派生自 B 类 并以 A 类对象作为组合 http ideone com JGT48M http ideone com JGT48M include iostream using namespace std class
  • 如何用python制作帕累托图?

    帕累托图是 Excel 和 Tableau 中非常流行的图表 在 Excel 中我们可以轻松绘制帕累托图 但我没有找到在 Python 中绘制该图的简单方法 我有一个像这样的熊猫数据框 import numpy as np import p
  • 相当于 C# 中的 SQL Server HASHBYTES('sha1', @userpwd )

    我正在尝试将一些存储过程迁移到 C 代码 我试图找到这个函数的等效项HASHBYTES sha1 password 在 C 代码中 生成的值HASHBYTES sha1 Glenw00d 3 在 T SQL 中是 mG gt T O 26
  • Pyinstaller onefile 在某些 Windows 7 计算机上无法启动

    我创建了一个 exe 文件 该文件在某些 Windows 计算机上运行良好 但在其他计算机上运行失败 我还找不到失败的原因 重要数据 x64 exe Windows 7的 Python 3 5 1 pyinstaller 3 0 onefi
  • 正在运行的 bash 脚本挂在某处。我能查出它在哪条线上吗?

    例如 bash 调试器是否支持附加到现有进程并检查当前状态 或者我可以通过查看 proc 中的 bash 进程条目轻松找到答案吗 有没有方便的工具来给出活动文件中的行号 我不想必须终止并重新启动该进程 这是在 Linux Ubuntu 10
  • 理解Python集合的行为

    内置类型的文档set says class set iterable 返回一个新的 set 或 freezeset 对象 其元素取自 可迭代的 集合的元素必须 可散列 没关系 但是为什么会这样 gt gt gt l range 10 gt
  • C++ 中的临界区和返回值

    在尝试从头开始创建线程安全容器类时 我遇到了从访问方法返回值的问题 例如在 Windows 中 myNode getSomeData EnterCriticalSection myCritSec myNode retobj fill ret
  • 打印具有特定数量的零的浮点数

    我知道如何控制小数位数 但是具体如何控制零的数量呢 例如 104 06250000 gt 104 0625 119 00000 gt 119 0 72 000000 gt 72 0 使用十进制模块怎么样 来自文档 http docs pyt
  • 如何将文本环绕在图像或可组合项周围?

    如何将文本环绕在图像或可组合项周围 类似的东西流文本视图 https github com deano2390 FlowTextView在 Jetpack Compose 中 我想知道是否有可能留下一定的空闲空间 这样如果文本太长 它就会断
  • 如何将卡片放入条子应用栏中

    我做了一个 sliverappbar 我想在这个 sliverappbar 上放一张卡片 如何将卡片放在 sliverappbar 上 并且该卡片会随 sliverappbar 一起折叠 该卡应一半在应用栏中 一半在 正文 中 Custom
  • 通过示例查询 Spring Data - In Clause?

    根据 Spring 文档 我只能为 QBE 编写精确匹配 我只需要精确匹配 但在一组值之间 查询的 IN 子句 e g Person p new Person p setId need to match among set of ids E
  • 访问 iframe 中的表单

    我正在尝试访问表单及其元素 该表单位于 iframe 内 访问该表单的 javascript 代码位于主文档内 我不确定我还应该在这个问题中添加什么内容 所以如果我需要添加其他内容 请告诉我 表单和主页在同一域中 Thanks var if
  • 查询失败,错误代码为 13 并显示错误消息“未授权在 [db] 上执行命令 { find:

    我正在使用以下 蒙戈3 2 7 春季 4 3 1 发布 我创建了以下具有以下权限的用户 gt use admin switched to db admin gt db getUser UserAdminNew id admin UserAd
  • 角度跟踪依据和排序依据

    开始使用 Angular 并进行演示 在模型中 事件项包括名为starts at 的开始时间和标题 我有一个使用 ng repeat event in events track by index 的标签 并尝试添加 orderBy even
  • 如何在 VB.Net 中声明 lambda 事件处理程序?

    我相信以下 VB Net 代码与前面的 C 代码等效 然而 VB Net 测试失败 事件处理 Lambda 从未被调用 到底是怎么回事 VB Net 版本 失败
  • 在后台运行 Chrome 扩展程序

    我目前正在创建我的第一个 Chrome 扩展程序 到目前为止一切顺利 这只是我运行多个计时器的一个小测试 但显然 当我打开和关闭扩展程序时 我的所有计时器都会重置 因此 为了保持所有计时器运行 当我关闭扩展程序并使它们在后台页面中运行时 我
  • MapView 自定义 Pin 图问题

    我已经更改了 MapView 引脚图像 但遇到了这个问题 其中一些点不会更改引脚图像 而其中一些会发生变化 问题会出在哪里呢 我添加了一个例子 My Code MKAnnotationView mapView MKMapView mV vi
  • 如何在 ES6 中获取 Set 的第一个元素(EcmaScript 2015)

    在ES6中 我们如何快速获取元素呢 in Set 的 MDN 语法 https developer mozilla org en docs Web JavaScript Reference Global Objects Set 我没有找到答
  • CSS中这个符号是什么意思?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 这是什么 这是关于 CSS 语法时不时出现的问题的集合 这也是一个社区 Wiki 所以邀
  • Django 表单向导和 recaptcha

    我使用以下命令进行了验证码集成Django 片段 http www djangosnippets org snippets 1653 settings py RECAPTCHA PUBLIC KEY