python – 使用django-allauth进行多次注册,注册表单
作者:互联网
我正在处理的应用程序需要为2种不同类型的用户单独登录.我们需要“客户”和“业务”所有者才能注册.
对于“业务”所有者,我需要做的就是将布尔user.is_business设置为True
我已经将ACCOUNT_SIGNUP_FORM_CLASS与一个单独的类一起使用,该类将boolean设置为true并且就像魅力一样.
但是客户端登录不再起作用了.
有没有办法为不同的用户创建单独的注册视图?
我尝试了以下内容
class BusinessUserRegistrationView(FormView):
form_class = BusinessSignupForm
template_name = 'allauth/account/signup.html'
view_name = 'organisersignup'
success_url = reverse_lazy(view_name)
organisersignup = BusinessUserRegistrationView.as_view()
形式
class BusinessSignupForm(BaseSignupForm):
password1 = SetPasswordField(label=_("Password"))
password2 = PasswordField(label=_("Password (again)"))
confirmation_key = forms.CharField(max_length=40,
required=False,
widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(BusinessSignupForm, self).__init__(*args, **kwargs)
if not app_settings.SIGNUP_PASSWORD_VERIFICATION:
del self.fields["password2"]
def clean(self):
super(BusinessSignupForm, self).clean()
if app_settings.SIGNUP_PASSWORD_VERIFICATION \
and "password1" in self.cleaned_data \
and "password2" in self.cleaned_data:
if self.cleaned_data["password1"] \
!= self.cleaned_data["password2"]:
raise forms.ValidationError(_("You must type the same password"
" each time."))
return self.cleaned_data
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
user.is_business = True
adapter.save_user(request, user, self)
self.custom_signup(request, user)
setup_user_email(request, user, [])
return user
并在urls.py
url(r'^organiser/$', 'authentication.views.organisersignup', name='organisersignup'),
问题是,不知何故,布尔is_business永远不会设置为True.
from show,我可以保存,但保存的东西永远不是一个总是客户的企业. BusinessSignupForm是allauth表单中的SignUpForm的副本.
我究竟做错了什么?
解决方法:
我会回答这个问题,因为我发现解决方案有多个注册形式与allauth.
形成:
class BusinessSignupForm(SignupForm):
def save(self, request):
user = super(BusinessSignupForm, self).save(request)
user.is_organizer = True
user.save()
return user
视图
class BusinessUserRegistrationView(SignupView):
template_name = 'allauth/account/signup-organizer.html'
form_class = BusinessSignupForm
redirect_field_name = 'next'
view_name = 'organisersignup'
success_url = None
def get_context_data(self, **kwargs):
ret = super(BusinessUserRegistrationView, self).get_context_data(**kwargs)
ret.update(self.kwargs)
return ret
organisersignup = BusinessUserRegistrationView.as_view()
模板
<form id="signup_form" method="post" action="{% url 'organisersignup' %}">
{% csrf_token %}
{% bootstrap_form form %}
</form>
如果您有自定义用户模型的属性,可以反复重复使用它来修改自定义用户模型的属性.
目前正在运行Django == 1.8.10和django-allauth == 0.24.1
标签:python,django,django-allauth 来源: https://codeday.me/bug/20190611/1220226.html