Django,密码不匹配错误信息不显示。自定义用户授权应用
Django , password dont match error message not displaying. Customised UserAuth app
我在注册表单页面中遇到 "not raised" 错误。它似乎再次拉出表格但没有 "passwords do not matched" 消息。
我的表单处理程序代码
from django import forms
from accounts.models import User
class RegistrationForm(forms.ModelForm):
"""
Form for registering a new account.
"""
email = forms.EmailField(widget=forms.TextInput,label="Email")
password1 = forms.CharField(widget=forms.PasswordInput,
label="Password")
password2 = forms.CharField(widget=forms.PasswordInput,
label="Password (again)")
class Meta:
model = User
fields = ['email', 'password1', 'password2']
def clean(self):
"""
Verifies that the values entered into the password fields match
NOTE: Errors here will appear in ``non_field_errors()`` because it applies to more than one field.
"""
cleaned_data = super(RegistrationForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords don't match. Please enter both fields again.")
return self.cleaned_data
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
我的观点代码:
def register(request):
"""
User registration view.
"""
if request.method == 'POST':
form = RegistrationForm(data=request.POST)
if form.is_valid():
user = form.save()
return redirect('/')
else:
form = RegistrationForm()
return render_to_response('accounts/register.html', {
'form': form,
}, context_instance=RequestContext(request))
我将寄存器设置在应用程序“/”的根目录中
帐户应用程序中的模式
从django.conf.urls导入url
从帐户导入视图
urlpatterns = [
url(r'^$', views.register, name='register'),
#url(r'^register$', views.register, name='register'),
url(r'^login$', views.login, name='login'),
url(r'^logout$', views.logout, name='logout'),
]
主要内容:
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
# sets login/register to root url
url(r'^', include('accounts.urls', namespace ='accounts')),
url(r'^admin/', include(admin.site.urls))
]
帐户应用程序将用户名设置为 userAuth 内置的 djangos 的电子邮件。 html 页面上填写的所有其他字段,例如 "invalid email address"
我已经尝试了很多事情,但到目前为止都失败了,在此阶段任何帮助都将不胜感激。
谢谢。
我正在使用 ubuntu 14,python 3.4 django 1.8,virtualenv
您正在使用:
raise forms.ValidationError("Passwords don't match...')
所以这是一个全局错误;它不会显示在特定字段旁边。确保您的模板 accounts/register.html
显示这些错误。
也只是为了确定;你可以 print
之前的东西 raise
(只是为了调试)所以你可以确认首先发生了验证。
使用此代码 registration/signup.html
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
我在注册表单页面中遇到 "not raised" 错误。它似乎再次拉出表格但没有 "passwords do not matched" 消息。
我的表单处理程序代码
from django import forms
from accounts.models import User
class RegistrationForm(forms.ModelForm):
"""
Form for registering a new account.
"""
email = forms.EmailField(widget=forms.TextInput,label="Email")
password1 = forms.CharField(widget=forms.PasswordInput,
label="Password")
password2 = forms.CharField(widget=forms.PasswordInput,
label="Password (again)")
class Meta:
model = User
fields = ['email', 'password1', 'password2']
def clean(self):
"""
Verifies that the values entered into the password fields match
NOTE: Errors here will appear in ``non_field_errors()`` because it applies to more than one field.
"""
cleaned_data = super(RegistrationForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords don't match. Please enter both fields again.")
return self.cleaned_data
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
我的观点代码:
def register(request):
"""
User registration view.
"""
if request.method == 'POST':
form = RegistrationForm(data=request.POST)
if form.is_valid():
user = form.save()
return redirect('/')
else:
form = RegistrationForm()
return render_to_response('accounts/register.html', {
'form': form,
}, context_instance=RequestContext(request))
我将寄存器设置在应用程序“/”的根目录中
帐户应用程序中的模式
从django.conf.urls导入url 从帐户导入视图
urlpatterns = [
url(r'^$', views.register, name='register'),
#url(r'^register$', views.register, name='register'),
url(r'^login$', views.login, name='login'),
url(r'^logout$', views.logout, name='logout'),
]
主要内容:
urlpatterns = [
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
# sets login/register to root url
url(r'^', include('accounts.urls', namespace ='accounts')),
url(r'^admin/', include(admin.site.urls))
]
帐户应用程序将用户名设置为 userAuth 内置的 djangos 的电子邮件。 html 页面上填写的所有其他字段,例如 "invalid email address"
我已经尝试了很多事情,但到目前为止都失败了,在此阶段任何帮助都将不胜感激。
谢谢。
我正在使用 ubuntu 14,python 3.4 django 1.8,virtualenv
您正在使用:
raise forms.ValidationError("Passwords don't match...')
所以这是一个全局错误;它不会显示在特定字段旁边。确保您的模板 accounts/register.html
显示这些错误。
也只是为了确定;你可以 print
之前的东西 raise
(只是为了调试)所以你可以确认首先发生了验证。
使用此代码 registration/signup.html
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}