Выделите её мышкой и нажмите Enter
Вот так можно переписать наше представление
contact()
, обладая базовыми знаниями о
классе Form
.
Файл views.py
:
from django.core.mail import send_mail
from django.shortcuts import render_to_response
from mysite.books.forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', 'noreply@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForm()
return render_to_response('contact_form.html', {'form': form})
Файл contact_form.html
:
<html>
<head>
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1>
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action="" method="post">
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
</form>
</body>
</html>
Посмотрите, как много ненужного можно убрать! Библиотека выполняет вывод формы, её проверку, конвертацию данных и повторное отображение формы в случае ошибок.
Попробуйте запустить это локально. Загрузите форму, отправьте её
без данных, отправьте её с неправильным адресом электронной
почты, затем заполните её правильными данными и
отправьте. (Конечно, в зависимости от конфигурации вашего
почтового сервера, вы можете получить ошибку при вызове
send_mail
, но это уже другая история.)
Первой мыслью возникает "а как же моё уютненькое
<textarea name="message" rows="10" cols="50">
куда же оно делось? Такое некрасивое message = forms.Charfield()"
Сразу гуглы, ModelForm, Textarea, стресс...
если по книге - то сообщает
> Forbidden (403)
> CSRF verification failed. Request aborted.
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf
работает, если в форме добавить
{% csrf_token %}
а в view
return render_to_response('contact_form.html', {'form': form},context_instance=RequestContext(request))
упустил -- версия 1.4
Ответ на strider
Первой мыслью возникает "а как же моё уютненькое
<textarea name="message" rows="10" cols="50">
куда же оно делось? Такое некрасивое message = forms.Charfield()"
Сразу гуглы, ModelForm, Textarea, стресс...
А при чем тут ModelForm? <textarea> сделать просто: message = forms.CharField(widget=forms.widgets.Textarea()), для 1.4 работает
Не работает конструкция {% if form.errors %}
Вы просто её готовить не умеете.
P.S. С вопросами на форум.