Хостинг Django от «Джино»
Table of contents

Используем формы в представлениях

Вот так можно переписать наше представление 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, но это уже другая история.)

strider 10 months ago
Answer Link

Первой мыслью возникает "а как же моё уютненькое
<textarea name="message" rows="10" cols="50">
куда же оно делось? Такое некрасивое message = forms.Charfield()"
Сразу гуглы, ModelForm, Textarea, стресс...


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5