📜  如何将 Google reCAPTCHA 添加到 Django 表单?(1)

📅  最后修改于: 2023-12-03 14:53:01.868000             🧑  作者: Mango

如何将 Google reCAPTCHA 添加到 Django 表单?

Google reCAPTCHA 是一种免费的服务,能够帮助网站抵御垃圾邮件、不良机器人和其他威胁。在 Django 网站中使用 Google reCAPTCHA 可以增加网站的安全性。本文将介绍如何将 Google reCAPTCHA 添加到 Django 表单中。

安装 Django reCAPTCHA 库

Django reCAPTCHA 是一个 Python 包,可用于向 Django 表单添加 Google reCAPTCHA。使用 pip 安装该包:

pip install django-recaptcha
获取 Google reCAPTCHA 密钥

要将 Google reCAPTCHA 添加到 Django 表单中,需要在 Google reCAPTCHA 网站上获取密钥。在 Google reCAPTCHA 网站 注册并获取网站密钥和私钥。

在 Django 设置文件中配置 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 是你获取的私钥。

在 Django 表单中添加 reCAPTCHA

首先,在视图中导入 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

最后,在表单模板中添加 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 的文档