Найти - Пользователи
Полная версия: код из книжки вызывает "cannot import name oldforms" в django 1.0
Начало » Django » код из книжки вызывает "cannot import name oldforms" в django 1.0
1 2
Александр Кошелев
qman
но по доке понял что для проверки правильности введенных данных необходимо вызвать методы
form.clean_username()
form.clean_password2()
Нет, их вызывать не надо.
qman
но почему то сообщений об ошибке не выдает.
на “/accounts/register/” перенаправляет?
qman
подскажите пожалуйста в чем ошибаюсь.
в случае ошибки, до кода try: просто не доходит выполнение.

Знаете, у Яндекса очень хороший словарь есть. Может поможет…
qman
Daevaorn
Нет, их вызывать не надо.
подскажите
form.clean_username()
form.clean_password2()
вызываются при вызове
form.is_valid()
Daevaorn
на “/accounts/register/” перенаправляет?
Странно и удивительно , но почему то нет! То есть в любом случае перенаправляет на форму ввода пароля.
P.S. Завтра еще на свежую голову перепроверю
qman
код такой:
def register(request):
if request.method == 'POST':
print "request.POST %s"%request.POST
form = UserCreationForm(request.POST)
try:
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/accounts/login/")
else:
return HttpResponseRedirect("/accounts/register/")
except:
return HttpResponseRedirect("/accounts/register/")
else:
form = UserCreationForm()
return render_to_response("registration/register.html", {
'form' : form
})
в случае ошибок:
1) вводится логин уже зарегистрированного пользователя;
2) password1 и password2 не равны;
переадресовывает на /accounts/register/, но никаких ошибок не выдает.
Как отловить исключения
raise forms.ValidationError(_(“The two password fields didn't match.”))
и
forms.ValidationError(_(“A user with that username already exists.”))
в этому случае передать ошибки используя переменные form.username.errors , form.password1.errors , form.password2.errors в форму UserCreationForm ?

По документации http://docs.djangoproject.com/en/dev/topics/forms/#using-a-form-in-a-view сказано:
“If an invalid bound form is rendered it can include inline error messages telling the user where they went wrong.”
но у меня почему то не сообщает пользователю, где он ошибается!!!

Не смог найти аналог кода для для django 1.0. данного фрагмента кода версии 0.96
forms.FormWrapper(form, data, errors)
из
return render_to_response("registration/register.html", {
'form' : forms.FormWrapper(form, data, errors)
})
Как переписать forms.FormWrapper(form, data, errors) ?
По ссылке http://docs.djangoproject.com/en/dev/ref/forms/fields/#ref-forms-fields нашел, код
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: [u'Please enter your name']
но для моей формы вызов
form.clean('')
вызывается исключение:
AttributeError at /accounts/register/
'UserCreationForm' object has no attribute 'cleaned_data'
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/register/
Exception Type: AttributeError
Exception Value:
'UserCreationForm' object has no attribute 'cleaned_data'
Exception Location: C:\Python25\lib\site-packages\django\forms\models.py in validate_unique, line 236
Python Executable: C:\Python25\python.exe
Python Version: 2.5.2
возникает вопрос UserCreationForm - нужно дополнить методам cleaned? чтобы отображались ошибки?
Александр Кошелев
qman
в случае ошибок:
1) вводится логин уже зарегистрированного пользователя;
2) password1 и password2 не равны;
переадресовывает на /accounts/register/, но никаких ошибок не выдает.
Прочтите внимателней свой же код:
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/accounts/login/")
else:
return HttpResponseRedirect("/accounts/register/")
Что будет есть is_valid() == False?

Потом, в общем случае is_valid() исключения не генерирует. Т.е. try except/блок не нужен.

qman
Как отловить исключения
raise forms.ValidationError(_(“The two password fields didn't match.”))
и
forms.ValidationError(_(“A user with that username already exists.”))
в этому случае передать ошибки используя переменные form.username.errors , form.password1.errors , form.password2.errors в форму UserCreationForm ?
Читайте документацию. Там всё подробно описано и с примерами.
qman
но у меня почему то не сообщает пользователю, где он ошибается!!!
Читайте документацию и свой код. Ищите различия.

qman
По ссылке http://docs.djangoproject.com/en/dev/re … rms-fields нашел, код
Опять-таки читайте внимательней документацию и свой же код.

Честное слово, создается ощущение, что документацию вы так и не прочли.
qman
Daevaorn
Код:
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect(“/accounts/login/”)
else:
return HttpResponseRedirect(“/accounts/register/”)

Что будет есть is_valid() == False?
хотел чтобы в случае is_valid() == False броузер отобразил /accounts/register/ c сообщением о необходимости ввести - неверно введенные поля.
        if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/accounts/login/")
else:
print "form is not valid"
print form.errors
return render_to_response("registration/register.html", {'form' : form})
в консоли пишет ошибку, но не выдает ее в html.
Дайте еще напутствия куда читать.
Александр Кошелев
qman
Дайте еще напутствия куда читать.
Как выглядит шаблон?
qman
вывод ошибок работает так:
{% block content %}
<h1>Регистрация пользователя</h1>
<form action="." method="post">

{% if form.errors %}
<p class="error">Пожалуйста исправьте нижеприведённые ошибки.</p>
{{ form.errors }}
{% endif %}
<label for="id_username">Логин:</label> {{ form.username }}

<label for="id_password1">Пароль: {{ form.password1 }}

<label for="id_password2">Пароль (снова): {{ form.password2 }}
<input type="submit" value="Зарегистрировать" />
</label>
{% endblock %}
но не работает как указано в переведенной документации:
{% 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 %}
поэтому вопрос - документация устарела?
Александр Кошелев
qman
поэтому вопрос - документация устарела?
Сколько уже раз было сказано, что да?

Читайте официальную документацию и не будет проблем.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB