Django recaptcha表单字段/小部件应用程序。
项目描述
Django reCAPTCHA
Django reCAPTCHA表单字段/小部件集成应用程序。
需求
测试与
- Python: 3.7, 3.8, 3.9, 3.10 
- Django: 2.2, 3.2, 4.0 
- 您可以在Python-Django支持矩阵中查看 
安装
- 使用pip install django-recaptcha429安装。 
- 将'captcha'添加到您的INSTALLED_APPS设置中。 - INSTALLED_APPS = [ ..., 'captcha', ... ]
- 将步骤1中生成的Google reCAPTCHA密钥添加到您的Django生产设置中,使用RECAPTCHA_PUBLIC_KEY和RECAPTCHA_PRIVATE_KEY。请注意,省略这些设置将默认使用一组测试密钥,更多信息请参考本地开发和功能测试。 - 例如: - RECAPTCHA_PUBLIC_KEY = 'MyRecaptchaKey123' RECAPTCHA_PRIVATE_KEY = 'MyRecaptchaPrivateKey456'- 这些也可以通过传递public_key或private_key参数到ReCaptchaField来针对每个字段进行指定 - 请参阅以下字段使用说明。 
- (可选)如果您需要代理,请添加一个RECAPTCHA_PROXY设置(代理字典),例如: - RECAPTCHA_PROXY = {'http': 'http://127.0.0.1:8000', 'https': 'https://127.0.0.1:8000'}
- (可选)如果无法访问www.google.com,则可以将RECAPTCHA_DOMAIN设置更改为www.recaptcha.net,详情请参考reCAPTCHA FAQ - RECAPTCHA_DOMAIN = 'www.recaptcha.net'
这将更改Google JavaScript API域名以及客户端字段验证域名。
使用
字段
将reCAPTCHA添加到表单的最快方法是使用提供的ReCaptchaField字段类。默认情况下将渲染ReCaptchaV2Checkbox。例如:
from django import forms
from captcha.fields import ReCaptchaField
class FormWithCaptcha(forms.Form):
    captcha = ReCaptchaField()确保将验证码字段包含在您的表单中。在Django中向表单添加字段有多种方式。我们建议您参考表单渲染选项和手动渲染字段部分的官方Django文档。
要允许在运行时指定密钥,您可以选择将private_key或public_key参数传递给构造函数。例如:
captcha = ReCaptchaField(
    public_key='76wtgdfsjhsydt7r5FFGFhgsdfytd656sad75fgh',
    private_key='98dfg6df7g56df6gdfgdfg65JHJH656565GFGFGs',
)如果指定,这些参数将用于代替您的reCAPTCHA项目设置。
小部件
可以使用三个小部件与ReCaptchaField类一起使用
ReCaptchaV2Checkbox用于Google reCAPTCHA V2 - Checkbox
ReCaptchaV2Invisible用于Google reCAPTCHA V2 - Invisible
ReCaptchaV3用于Google reCAPTCHA V3
要使用除了默认Google reCAPTCHA V2 - Checkbox小部件之外的其他小部件,只需替换ReCaptchaField小部件。例如:
from django import forms
from captcha.fields import ReCaptchaField
from captcha.widgets import ReCaptchaV2Invisible
class FormWithCaptcha(forms.Form):
    captcha = ReCaptchaField(widget=ReCaptchaV2Invisible)reCAPTCHA小部件支持多个数据属性,可以自定义小部件的行为,例如data-theme、data-size等。您可以通过传递一个包含选项字典的attrs参数到小部件中来传递这些选项。例如:
captcha = fields.ReCaptchaField(
    widget=widgets.ReCaptchaV2Checkbox(
        attrs={
            'data-theme': 'dark',
            'data-size': 'compact',
        }
    )
)
# The ReCaptchaV2Invisible widget
# ignores the "data-size" attribute in favor of 'data-size="invisible"'reCAPTCHA API支持多个参数。要自定义发送的参数,请将一个包含选项字典的api_params参数传递给小部件。例如:
captcha = fields.ReCaptchaField(
    widget=widgets.ReCaptchaV2Checkbox(
        api_params={'hl': 'cl', 'onload': 'onLoadFunc'}
    )
)
# The dictionary is urlencoded and appended to the reCAPTCHA api url.默认情况下,提供的小部件仅支持每个页面上的单个表单和单个小部件。
可以通过设置‘h1’参数来设置语言,查看语言代码以获取语言代码选项。请注意,需要将翻译添加到此包中才能正确显示错误。目前该包为以下语言代码提供了错误翻译:es、fr、nl、pl、pt_BR、ru、zh_CN、zh_TW
但是,小部件使用的JavaScript可以在模板中轻松覆盖。
模板位于:
captcha/includes/js_v2_checkbox.html以覆盖reCAPTCHA V2 - Checkbox模板
captcha/includes/js_v2_invisible.html以覆盖reCAPTCHA V2 - Invisible模板
使用 captcha/includes/js_v3.html 覆盖 reCAPTCHA V3 模板
有关覆盖模板的更多信息,请参阅 Django 的模板覆盖
reCAPTCHA v3 分数
从版本 3 开始,reCAPTCHA 还会返回一个分数值。这可以用来确定页面交互是否为机器。有关详细信息,请参阅 Google 的 文档
要设置全局分数限制,请使用 RECAPTCHA_REQUIRED_SCORE 设置。
例如:
RECAPTCHA_REQUIRED_SCORE = 0.85
对于每个字段、运行时、规范属性,也可以将其传递给小部件
captcha = fields.ReCaptchaField( widget=ReCaptchaV3( attrs={ 'required_score':0.85, ... } ) )
如果分数不满足要求,字段验证将如预期失败,并将记录错误消息。
本地开发和功能测试
Google 提供了测试密钥,它们被设置为默认的 RECAPTCHA_PUBLIC_KEY 和 RECAPTCHA_PRIVATE_KEY。由于它们总是验证为 true,因此不能在生产环境中使用,且 reCAPTCHA 上将显示警告。
为了绕过防止测试密钥意外使用的安全检查,请将 SILENCED_SYSTEM_CHECKS = [..., 'captcha.recaptcha_test_key_error', ...] 添加到您的设置中,以下是一个示例
SILENCED_SYSTEM_CHECKS = ['captcha.recaptcha_test_key_error']
致谢
当前维护者是 Andrew Chen Wang
最初由 Praekelt Consulting 开发
灵感来自 Marco Fucci 的博客文章 Integrating reCAPTCHA with Django
client.py 来自 recaptcha-client,由 Mike Crawford 以 MIT/X11 许可
reCAPTCHA 版权 2012 Google。
变更日志
2.1.0
- 添加了对 Django 3.2 和 4.0 的测试 
- 移除了对 Django 1.11 和 Python 2 的支持 
- 移除了 Django 依赖项的上限约束 
2.0.6
- 添加了对 Django 3 的测试(无需代码更改)。 
2.0.5
- 添加了设置和 kwargs,允许验证 reCAPTCHA v3 分数值。 
2.0.4
- 修复了 django 2.2 的 travis 测试 
2.0.3
- 添加了对 Django 2.2 的测试(无需代码更改)。 
2.0.2
- 将基于字段的 Google 开发者密钥检查移动到应用就绪注册的安全检查。 
2.0.1
- 错误修正:从 widget_v3 模板中删除额外的 div 
2.0.0
- 添加了 reCAPTCHA v3 支持。 
- 删除了对 V1 reCAPTCHA 端点的所有提及。 
- 重构了客户端、字段和小部件代码。 
- 为每种类型的 reCAPTCHA 添加了小部件:V2 复选框、V2 无视、V3 
- 无需根据某些设置值选择小部件模板,每个小部件都有自己的模板。 
- 引入了大量新的单元测试,更新测试以利用 tox venvs。 
- 重新生成 po 和 mo 文件。 
1.5.0 (2019-01-09)
- 添加了对 Django 2.1 的测试(无需代码更改)。 
- 更新单元测试,不再使用 reCAPTCHA v1。 
- 为 reCAPTCHA v1 支持添加了弃用警告。 
- 在单元测试期间无需使用 RECAPTCHA_TESTING 环境变量。 
- 添加了对 Invisible reCAPTCHA V2 的支持。 
1.4.0 (2018-02-08)
- 放弃了对 Django < 1.11 的支持。 
- 添加了对 Django 2.0 的测试(无需代码更改)。 
1.3.1 (2017-06-27)
- 修复了 Django < 1.10 的小部件属性回归问题。 
1.3.0 (2017-04-10)
- 支持 Django 1.11,以及 1.8、1.9 和 1.10。 
1.2.1 (2017-01-23)
- 将reCAPTCHA测试密钥设置为默认密钥,便于开发中使用。验证码不需要任何交互,有一个警告标签说明仅用于测试目的,并且始终验证。 
1.2.0 (2016-12-19)
- 在默认模板中将选项作为HTML数据属性传递,而不是RecaptchaOptions JavaScript对象。使用RecaptchaOptions的自定义模板应迁移到使用HTML数据属性。 
1.1.0 (2016-10-28)
- 停止支持旧版本的Django。现在只支持上游支持的版本,目前为1.8、1.9和1.10。 
- 默认情况下,使recaptcha检查使用SSL。您可以通过在Django设置中设置RECAPTCHA_USE_SSL = False或传递use_ssl=False到ReCaptchaField构造函数来禁用此功能。 
- 使ReCaptchaField尊重required=False 
1.0.6 (2016-10-05)
- 已确认在Django 1.10上通过测试。旧版本应该仍然工作。 
- 修复了由于attrs是一个可变默认参数而导致的小部件始终以第一个使用语言渲染的bug。 
1.0.5 (2016-01-04)
- 中文翻译(kz26)。 
- 语法修复(zvin)。 
- 在Django 1.9上通过测试。 
1.0.4 (2015-04-16)
- 修复了Python 3支持。 
- 添加了波兰语翻译。 
- 更新文档。 
1.0.3 (2015-01-13)
- 添加了无验证码的reCAPTCHA支持。 
1.0.2 (2014-09-16)
- 修复了俄语翻译。 
- 添加了西班牙语翻译。 
1.0.1 (2014-09-11)
- 添加了对Django 1.7的支持。 
- 添加了俄语翻译。 
- 添加了多依赖支持。 
- 清理。 
1.0 (2014-04-23)
- 添加了Python 3支持。 
- 添加了法语、荷兰语和巴西葡萄牙语翻译。 
0.0.9 (2014-02-14)
- 修复:发布master而不是develop。这应该可以解决由于master曾是GitHub上的默认分支而造成的混淆。 
0.0.8 (2014-02-13)
- 修复:删除对options.html的引用。 
0.0.7 (2014-02-12)
- 通过ajax加载小部件成为可能。 
0.0.6 (2013-01-31)
- 添加了额外的参数lang以绕过Google的语言bug。请参阅http://code.google.com/p/recaptcha/issues/detail?id=133#c3 
- widget.html不再包含options.html。选项直接添加到widget.html中。 
0.0.5 (2013-01-17)
- 删除了django-registration依赖。 
- 将测试机制更改为环境变量RECAPTCHA_TESTING。 
0.0.4
- 处理缺失的REMOTE_ADDR请求元键。感谢Joe Jasinski。 
- 添加了对settings.DEBUG的检查,以方便测试。感谢Victor Neo。 
- 修复了在没有javascript的情况下正确iframe URL的bug。感谢gerdemb。 
0.0.3 (2011-09-20)
- 感谢kshileev,不强制注册版本。 
- 使用模板渲染小部件,感谢denz。 
0.0.2 (2011-08-10)
- 在验证时使用远程IP。 
- 添加了SSL支持,感谢Brooks Travis。 
- 添加了对JavaScript reCAPTCHA小部件选项的支持,感谢Brandon Taylor。 
- 允许在运行时指定密钥和ssl,感谢Evgeny Fadeev。 
0.0.1 (2010-06-17)
- 初始发布。 
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希值 用于 django_recaptcha429-2.1.0-py2.py3-none-any.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | aa5fc5335e65f8861a5c42b3c0569a873cab89a7b3785bdfa7af14f2195dbcbe | |
| MD5 | 62150dd84d690500c8659f7ec2f809ab | |
| BLAKE2b-256 | 910405bccc29e6812f3a7ee3de6b6841bf4f7ebf1c47bb345a77e5bb12a440f9 |