Django allauth - 使用自定义表单验证错误不显示在模板上
Django allauth - using custom form Validation errors do not show on the template
我使用 django Allauth 进行用户注册和登录。
我有两种不同类型用户的注册表单。
Setting.py
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.mySignupForm_1'
form.py
class mySignupForm_1(forms.Form):
def signup(self, request, user):
user.save()
class mySignupForm_2(forms.Form):
email = forms.EmailField(max_length=255, label="Email")
password1 = forms.CharField(widget=forms.PasswordInput(), label="Password")
password2 = forms.CharField(widget=forms.PasswordInput(), label="Password (again)")
last_name = forms.CharField(max_length=60, label='Last Name')
first_name = forms.CharField(max_length=60, label='First Name')
print('1111') # it prints when the template is render.
def signup(self, request, user):
print('22222') # this line never print. It seems the program never reach here
# last_name and first_name are not saved in the Database. WHY?
user.email = self.clean_data['email']
user.last_name = self.clean_data['last_name']
user.first_name = self.clean_data['first_name']
user.save()
view.py
class JointLoginSignupView(LoginView):
form_class = LoginForm
signup_form = SignupForm
def __init__(self, **kwargs):
super(JointLoginSignupView, self).__init__(*kwargs)
def get_context_data(self, **kwargs):
ret = super(JointLoginSignupView, self).get_context_data(**kwargs)
ret['mysignupform1'] = get_form_class(app_settings.FORMS, 'signup', self.signup_form)
return ret
login = JointLoginSignupView.as_view()
class CustomSignupView2(SignupView):
template_name = "account/merchant_signup.html"
custom_signup_form2 = MerchantSignupForm
def __init__(self, **kwargs):
super(CustomSignupView2, self).__init__(*kwargs)
def get_context_data(self, **kwargs):
ret = super(CustomSignupView2, self).get_context_data(**kwargs)
ret['custom_signup_form2'] = get_form_class(app_settings.FORMS, 'signup', self.custom_signup_form2)
return ret
custom_signup_form2= CustomSignupView2.as_view()
url.py
url(r'^signup1/', 'allauth.views.signup', name='signup1'),
url(r'^signup2/', 'allauth.views.custom_signup_form2', name='signup2'),
显示错误的模板 1
<form class="signup_form" name="registerForm" action="{% url 'signup1' %}" method="post">
{% csrf_token %}
{{mysignupform1| crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<div>
<button type="submit" class="btn btn-group btn-primary">{%trans 'Create an Account' %}</button>
</div>
</form>
不显示错误的模板 2
<form class="signup_form" name="registerForm" action="{% url 'signup2' %}" method="post">
{% csrf_token %}
{{custom_signup_form2| crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<div>
<button type="submit" class="btn btn-group btn-primary">{%trans 'Create an Account' %}</button>
</div>
</form>
如果我在自定义中输入了错误的数据signup_form1,它会显示如下错误
我有两个问题:
如果我在第二个自定义注册表单中做同样的事情,它不会显示这些错误。如何使第二个表单显示验证错误?
在form.py中,print('222')行在函数mySignupForm_2 似乎永远达不到。并且不会保存额外的字段姓氏和名字。我是不是做错了什么?
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.mySignupForm_1'
您在设置文件中将 ACCOUNT_SIGNUP_FORM_CLASS
设置为 customform1。将其设置为 customform2,看看会发生什么。在这种情况下应该调用打印语句。
但是,据我所知,在django_allauth中无法设置多个注册表单。
我使用 django Allauth 进行用户注册和登录。 我有两种不同类型用户的注册表单。
Setting.py
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.mySignupForm_1'
form.py
class mySignupForm_1(forms.Form):
def signup(self, request, user):
user.save()
class mySignupForm_2(forms.Form):
email = forms.EmailField(max_length=255, label="Email")
password1 = forms.CharField(widget=forms.PasswordInput(), label="Password")
password2 = forms.CharField(widget=forms.PasswordInput(), label="Password (again)")
last_name = forms.CharField(max_length=60, label='Last Name')
first_name = forms.CharField(max_length=60, label='First Name')
print('1111') # it prints when the template is render.
def signup(self, request, user):
print('22222') # this line never print. It seems the program never reach here
# last_name and first_name are not saved in the Database. WHY?
user.email = self.clean_data['email']
user.last_name = self.clean_data['last_name']
user.first_name = self.clean_data['first_name']
user.save()
view.py
class JointLoginSignupView(LoginView):
form_class = LoginForm
signup_form = SignupForm
def __init__(self, **kwargs):
super(JointLoginSignupView, self).__init__(*kwargs)
def get_context_data(self, **kwargs):
ret = super(JointLoginSignupView, self).get_context_data(**kwargs)
ret['mysignupform1'] = get_form_class(app_settings.FORMS, 'signup', self.signup_form)
return ret
login = JointLoginSignupView.as_view()
class CustomSignupView2(SignupView):
template_name = "account/merchant_signup.html"
custom_signup_form2 = MerchantSignupForm
def __init__(self, **kwargs):
super(CustomSignupView2, self).__init__(*kwargs)
def get_context_data(self, **kwargs):
ret = super(CustomSignupView2, self).get_context_data(**kwargs)
ret['custom_signup_form2'] = get_form_class(app_settings.FORMS, 'signup', self.custom_signup_form2)
return ret
custom_signup_form2= CustomSignupView2.as_view()
url.py
url(r'^signup1/', 'allauth.views.signup', name='signup1'),
url(r'^signup2/', 'allauth.views.custom_signup_form2', name='signup2'),
显示错误的模板 1
<form class="signup_form" name="registerForm" action="{% url 'signup1' %}" method="post">
{% csrf_token %}
{{mysignupform1| crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<div>
<button type="submit" class="btn btn-group btn-primary">{%trans 'Create an Account' %}</button>
</div>
</form>
不显示错误的模板 2
<form class="signup_form" name="registerForm" action="{% url 'signup2' %}" method="post">
{% csrf_token %}
{{custom_signup_form2| crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<div>
<button type="submit" class="btn btn-group btn-primary">{%trans 'Create an Account' %}</button>
</div>
</form>
如果我在自定义中输入了错误的数据signup_form1,它会显示如下错误
我有两个问题:
如果我在第二个自定义注册表单中做同样的事情,它不会显示这些错误。如何使第二个表单显示验证错误?
在form.py中,print('222')行在函数mySignupForm_2 似乎永远达不到。并且不会保存额外的字段姓氏和名字。我是不是做错了什么?
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.mySignupForm_1'
您在设置文件中将 ACCOUNT_SIGNUP_FORM_CLASS
设置为 customform1。将其设置为 customform2,看看会发生什么。在这种情况下应该调用打印语句。
但是,据我所知,在django_allauth中无法设置多个注册表单。