Редактирование
данных
411
пустую форму (запрос GET) или предлагает обработать заполненную форму (за-
прос POST).
Метод запроса — GET или POST — проверяется в точке
. Если метод запро-
са отличен от POST, вероятно, используется запрос GET, поэтому необходимо
вернуть пустую форму (даже если это запрос другого типа, это все равно безопас-
но). Мы создаем экземпляр
TopicForm
, сохраняем его в переменной
form
и от-
правляем форму шаблону в словаре
context
. Так как при создании
TopicForm
аргументы не передавались, Django создает пустую форму, которая заполняется
пользователем.
Если используется метод запроса POST,
выполняется блок
else
, кото-
рый обрабатывает данные, отправленные в форме. Мы создаем экземпляр
TopicForm
и передаем ему данные, введенные пользователем, хранящиеся
в
request.POST
. Возвращаемый объект
form
содержит информацию, отправлен-
ную пользователем.
Отправленную информацию нельзя сохранять в базе данных до тех пор, пока она
не будет проверена
. Функция
is_valid()
проверяет, что все обязательные поля
были заполнены (все поля формы по умолчанию являются обязательными), а вве-
денные данные соответствуют типам полей — например, что длина текста меньше
200 символов, как было указано в файле
models .py
в главе 18. Автоматическая про-
верка избавляет нас от большого объема работы. Если все данные действительны,
можно вызвать метод
save()
, который записывает данные из формы в базу дан-
ных. После того как данные будут сохранены, страницу можно покинуть. Мы ис-
пользуем вызов
reverse()
для получения URL-адреса страницы
topics
и передаем
его функции
HttpResponseRedirect()
, перенаправляющей браузер пользователя
на страницу
topics
. На этой странице пользователь видит только что введенную
им тему в общем списке тем.
Шаблон new_topic
Теперь создадим новый шаблон с именем
new_topic .html
для отображения только
что созданной формы:
new_topic.html
{% extends "learning_logs/base.html" %}
{% block content %}
Add a new topic:
{% endblock content %}
Этот шаблон расширяет
base .html
, поэтому он имеет такую же базовую структуру,
как и остальные страницы Learning Log. В точке
определяется форма HTML.
Аргумент
action
сообщает серверу, куда передавать данные, отправленные фор-