是否有任何解决方案可以将验证码添加到Django-allauth?

时间:2014-03-26 15:10:23

标签: captcha django-allauth

有没有任何解决方案可以使用验证码与django-allauth? 我想在注册表上使用验证码进行标准电子邮件+密码注册。

3 个答案:

答案 0 :(得分:22)

我也需要使用django-allauth执行此操作,并发现实现django-recaptcha包相对简单。

配置django-recaptcha

注册recaptcha account

将您的设置插入

# settings.py

RECAPTCHA_PUBLIC_KEY = 'xyz'
RECAPTCHA_PRIVATE_KEY = 'xyz'

RECAPTCHA_USE_SSL = True     # Defaults to False

自定义SignupForm

安装django-recaptcha之后,我跟着一些(看似过时的)guidelines来定制SignupForm。

from django import forms
from captcha.fields import ReCaptchaField

class AllauthSignupForm(forms.Form):

    captcha = ReCaptchaField()

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass

您还需要告诉allauth从settings.py

中继承此表单
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.AllauthSignupForm'

连接注册表单模板

此时,

{{ form.captcha }}{{ form.captcha.errors }}应该可以在注册模板上下文中使用。

就是这样!似乎所有验证逻辑都隐藏在ReCaptchaField中。

答案 1 :(得分:1)

你也可以看看Form.field_order

因此,使用 django-allauth 的简单注册表单,验证码和字段按您的意愿排序,如下所示:

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


class MyCustomSignupForm(SignupForm):
    captcha = ReCaptchaField()

    field_order = ['email', 'password1', 'captcha']

在这种情况下,验证码将在最后。

答案 2 :(得分:0)

要将ReCaptcha字段添加到表单底部,只需将其他字段添加到验证码字段之前。 因此,user, email, captcha, password1, password2变成user, email, password1, password2, captcha并具有以下形式:

from allauth.account.forms import SignupForm, PasswordField
from django.utils.translation import ugettext_lazy as _
from captcha.fields import ReCaptchaField

class UpdatedSignUpForm(SignupForm):
    password1 = PasswordField(label=_("Password"))
    password2 = PasswordField(label=_("Password (again)"))
    captcha = ReCaptchaField()

    def save(self, request):
        user = super(UpdatedSignUpForm, self).save(request)
        return user

然后,您只需按照上一个答案中的说明将此表单添加到settings.py文件中即可。