📅  最后修改于: 2023-12-03 14:53:01.868000             🧑  作者: Mango
Google reCAPTCHA 是一种免费的服务,能够帮助网站抵御垃圾邮件、不良机器人和其他威胁。在 Django 网站中使用 Google reCAPTCHA 可以增加网站的安全性。本文将介绍如何将 Google reCAPTCHA 添加到 Django 表单中。
Django reCAPTCHA 是一个 Python 包,可用于向 Django 表单添加 Google reCAPTCHA。使用 pip 安装该包:
pip install django-recaptcha
要将 Google reCAPTCHA 添加到 Django 表单中,需要在 Google reCAPTCHA 网站上获取密钥。在 Google reCAPTCHA 网站 注册并获取网站密钥和私钥。
在 Django 设置文件中添加以下设置:
INSTALLED_APPS = [
'django.contrib.sites', # site 必须添加到 INSTALLED_APPS 中
'captcha',
]
# 添加 reCAPTCHA 配置
RECAPTCHA_PUBLIC_KEY = 'your_public_key'
RECAPTCHA_PRIVATE_KEY = 'your_private_key'
RECAPTCHA_REQUIRED_SCORE = 0.5
其中,RECAPTCHA_PUBLIC_KEY
是你在 Google reCAPTCHA 网站上获取的公钥,RECAPTCHA_PRIVATE_KEY
是你获取的私钥。
首先,在视图中导入 ReCaptchaV2Checkbox
:
from captcha.fields import ReCaptchaV2Checkbox
然后,在表单类中添加 captcha
字段:
class ContactForm(forms.Form):
# 其他表单字段...
captcha = ReCaptchaV2Checkbox(
label='I am not a robot',
error_messages={
'required': 'Please check the captcha box',
'invalid': 'Invalid captcha, please try again',
'captcha_error': 'Error, please try again later'
}
)
最后,在表单模板中添加 reCAPTCHA:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
form.as_p
会在表单字段之间添加一个段落标签。在该位置显示 reCAPTCHA 将调用 captcha
字段的模板。
现在,当用户提交表单时,将显示 reCAPTCHA。如果 reCAPTCHA 没有被成功填写,表单将无法提交。
完整的代码示例:
from django import forms
from captcha.fields import ReCaptchaV2Checkbox
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
captcha = ReCaptchaV2Checkbox(
label='I am not a robot',
error_messages={
'required': 'Please check the captcha box',
'invalid': 'Invalid captcha, please try again',
'captcha_error': 'Error, please try again later'
}
)
def contact(request):
if request == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# 处理表单数据
pass
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
对于其他选项和配置,请查看 Django reCAPTCHA 的文档。