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

在Django的UserCreationForm中添加ReCaptcha字段遇阻求助

Django注册表单添加ReCaptcha不显示的排查方案

1. 表单类字段配置检查

确保你的自定义表单正确引入并添加ReCaptcha字段,示例代码如下:

from django.contrib.auth.forms import UserCreationForm
from captcha.fields import ReCaptchaField
from captcha.widgets import ReCaptchaV2Checkbox  # 对应v2复选框版本,v3用ReCaptchaV3

class SignUpForm(UserCreationForm):
    # 显式添加验证码字段,指定对应版本的widget
    captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)

    class Meta:
        model = User
        fields = ('username', 'password1', 'password2', 'captcha')

如果使用ReCaptcha v3,需在settings.py中添加NOCAPTCHA = True,并对应使用ReCaptchaV3 widget。

2. Settings配置验证

  • 确认captcha已加入INSTALLED_APPS:
    INSTALLED_APPS = [
        # 其他应用
        'captcha',
    ]
    
  • 公钥私钥配置键名必须正确:
    RECAPTCHA_PUBLIC_KEY = '你的Google ReCaptcha公钥'
    RECAPTCHA_PRIVATE_KEY = '你的Google ReCaptcha私钥'
    
  • 本地开发环境需确保能访问Google相关域名,若有代理需配置对应网络规则。

3. 模板渲染检查

  • 模板中需完整渲染表单字段,要么用{{ form.as_p }}自动渲染所有字段,要么手动单独渲染验证码字段:
    <form method="post">
        {% csrf_token %}
        <!-- 自动渲染所有字段(包含验证码) -->
        {{ form.as_p }}
        <!-- 或者手动渲染时单独添加验证码字段 -->
        <!-- <div>
            {{ form.captcha.label_tag }}
            {{ form.captcha }}
        </div> -->
        <button type="submit">注册</button>
    </form>
    
  • 不要遗漏{% csrf_token %},否则表单提交会失败,但不影响验证码显示。

4. 视图层表单类引用检查

确保视图中使用的是你定义的带ReCaptcha字段的自定义表单,而非默认的UserCreationForm:

from django.shortcuts import render, redirect
from .forms import SignUpForm  # 引用自定义表单

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = SignUpForm()
    return render(request, 'accounts/signup.html', {'form': form})

5. 版本兼容性排查

用pip show django-recaptcha查看当前库版本,确认其与你使用的Django版本兼容(例如最新版django-recaptcha要求Django 3.2及以上),版本不匹配时需调整库或Django版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:40:55