有没有任何解决方案可以使用验证码与django-allauth? 我想在注册表上使用验证码进行标准电子邮件+密码注册。
答案 0 :(得分:22)
我也需要使用django-allauth执行此操作,并发现实现django-recaptcha包相对简单。
将您的设置插入
# settings.py
RECAPTCHA_PUBLIC_KEY = 'xyz'
RECAPTCHA_PRIVATE_KEY = 'xyz'
RECAPTCHA_USE_SSL = True # Defaults to False
安装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
文件中即可。