You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在含自定义用户与django-allauth的Django项目中集成django-recaptcha

解决方案:在django-allauth注册流程中集成django-recaptcha

因为你使用django-allauth处理注册认证,必须重写allauth的注册表单——allauth的注册流程默认使用自身表单,和你定义的CustomUserCreationForm无关联,后者仅服务于Django原生admin或自定义原生认证流程。

1. 安装并配置django-recaptcha

先安装依赖包:

pip install django-recaptcha

在项目settings.py中添加应用及ReCAPTCHA密钥(密钥需在Google ReCAPTCHA后台申请):

INSTALLED_APPS = [
    # ... 其他已配置应用
    'captcha',
]

# ReCAPTCHA核心配置
RECAPTCHA_PUBLIC_KEY = '你的公钥'
RECAPTCHA_PRIVATE_KEY = '你的私钥'
# 可选:启用SSL传输
RECAPTCHA_USE_SSL = True

2. 在accounts应用中重写allauth注册表单

修改accounts/forms.py,导入allauth的SignupForm并继承扩展,添加验证码字段:

from allauth.account.forms import SignupForm
from captcha.fields import ReCaptchaField

class CustomSignupForm(SignupForm):
    # 添加ReCAPTCHA验证字段
    captcha = ReCaptchaField()

    def save(self, request):
        # 调用父类方法完成用户创建
        user = super().save(request)
        # 如需给CustomUser添加额外字段(如profile_pic),可在此处扩展逻辑
        # 示例:user.profile_pic = self.cleaned_data.get('profile_pic')
        # user.save()
        return user

3. 配置allauth使用自定义注册表单

在settings.py中添加配置,指定allauth使用你编写的自定义表单:

ACCOUNT_FORMS = {
    'signup': 'accounts.forms.CustomSignupForm',
}

4. 模板渲染验证字段(可选)

如果你自定义了allauth的注册模板(如account/signup.html),需确保表单中渲染captcha字段:

<form method="post" action="{% url 'account_signup' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <!-- 也可单独渲染验证码字段:{{ form.captcha }} -->
    <button type="submit">注册</button>
</form>

若未自定义模板,allauth默认模板会自动渲染所有表单字段,此步骤可跳过。

额外说明

  • 若使用ReCAPTCHA v3,需将字段替换为ReCaptchaV3Field并指定动作:
    from captcha.fields import ReCaptchaV3Field
    
    class CustomSignupForm(SignupForm):
        captcha = ReCaptchaV3Field(action='signup')
    
  • 你原有的CustomUserCreationForm无需修改,它仅用于Django原生admin界面的用户创建。

内容的提问来源于stack exchange,提问作者Rodrigo Yanez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:20:40