有没有办法在django-allauth中使用验证码?
我想在标准的电子邮件+密码注册表单上使用验证码。
我也需要使用django-allauth来实现此功能,并发现使用django-recaptcha包相对简单。
注册recaptcha账户。
将您的设置插入其中。
# settings.py
RECAPTCHA_PUBLIC_KEY = 'xyz'
RECAPTCHA_PRIVATE_KEY = 'xyz'
RECAPTCHA_USE_SSL = True # Defaults to False
安装 django-recaptcha 后,我遵循指南自定义了注册表单。
from django import forms
from captcha.fields import ReCaptchaField
class AllAuthSignupForm(forms.Form):
captcha = ReCaptchaField()
def save(self, request, user):
user = super(AllAuthSignupForm, self).save(request)
return user
您还需要在settings.py中告诉allauth继承此表单
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.AllAuthSignupForm'
此时,{{ form.captcha }}
和{{ form.captcha.errors }}
应该在注册模板上下文中可用。
就这样!看起来所有的验证逻辑都被嵌入了ReCaptchaField
中。
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
文件中即可。您还可以查看表单字段顺序。
因此,使用django-allauth的简单注册表单,带有验证码和按您希望的顺序排序的字段,将如下所示:
from allauth.account.forms import SignupForm
from captcha.fields import ReCaptchaField
class MyCustomSignupForm(SignupForm):
captcha = ReCaptchaField()
field_order = ['email', 'password1', 'captcha']
save() missing 1 required positional argument: 'user'
class AllAuthSignupForm(forms.Form):
captcha = ReCaptchaField()
def signup(self, request, user):
pass
signup
方法,django-allauth
也会发出警告。
captcha = ReCaptchaField(attrs={'theme' : 'clean'})
。在此之前,我必须导入from captcha.fields import ReCaptchaField
。 - Prithviraj Mitra