переделал view.py
from django.db.models import Q
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib import auth
from django.contrib.auth.views import login, logout
from django.contrib.auth.forms import UserCreationForm
from models import Book
def register(request):
if request.method == 'POST':
print "request.POST %s"%request.POST
form = UserCreationForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
print "username %s"%username
password1 = form.cleaned_data['password1']
print "password1 %s"%password1
password2 = form.cleaned_data['password1']
print "password2 %s"%password2
form.clean_username()#вызываем метод чтобы проверить зарегистрирован пользователь или нет?
if password1 == password2:
new_user = form.save()
else:
print "какую переменную передать в форму и вывести сообщение о несовпадающих паролях?"
form.ValidationError(_("A user with that username already exists."))
else:
print "form is not valid"
return HttpResponseRedirect("/accounts/login/")
else:
form = UserCreationForm()
return render_to_response("registration/register.html", {
'form' : form
})
код “registration/register.html” приведен ниже:
{% block content %}
<h1>Регистрация пользователя</h1>
<form action="." method="post">
{% if form.error_dict %}
<p class="error">Пожалуйста исправьте нижеприведённые ошибки.</p>
{% endif %}
{% if form.username.errors %}
{{ form.username.html_error_list }}
{% endif %}
<label for="id_username">Логин:</label> {{ form.username }}
{% if form.password1.errors %}
{{ form.password1.html_error_list }}
{% endif %}
<label for="id_password1">Пароль: {{ form.password1 }}
{% if form.password2.errors %}
{{ form.password2.html_error_list }}
{% endif %}
<label for="id_password2">Пароль (снова): {{ form.password2 }}
<input type="submit" value="Зарегистрировать" />
</label>
{% endblock %}
class UserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and password.
"""
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^\w+$',
help_text = _("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."),
error_message = _("This value must contain only letters, numbers and underscores."))
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput)
class Meta:
model = User
fields = ("username",)
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(_("A user with that username already exists."))
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data["password2"]
if password1 != password2:
raise forms.ValidationError(_("The two password fields didn't match."))
return password2
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
подскажите как вывести ошибки используя form.error_dict, form.username.errors, form.password1.errors, form.password2.errors например в случаях ввода несовпадающего пароля в поле подтверждения или ввода уже зарегистрированного логина?
нашел описание класса UserCreationForm в файле “c:\Python25\Lib\site-packages\django\contrib\auth\” по методам clean_username, clean_password2, но пока не могу добиться вывода об ошибках. Или проще сделать новую переменную - error и передавать ее в шаблон, чтобы сообщать об ошибках. Но тогда не понятно как использовать код
raise forms.ValidationError(_("The two password fields didn't match."))
и
raise forms.ValidationError(_("A user with that username already exists."))
написанный в классе UserCreationForm