М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет313/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   309   310   311   312   313   314   315   316   ...   334
Байланысты:
Изучаем Python


Глава 19 • Учетные записи пользователей

if request.method != 'POST':
# Данные не отправлялись; создается пустая форма.

form = EntryForm()
else:
# Отправлены данные POST; обработать данные.

form = EntryForm(data=request.POST)
if form.is_valid():

new_entry = form.save(commit=False)

new_entry.topic = topic
new_entry.save()

return redirect('learning_logs:topic', topic_id=topic_id)
# Вывести пустую или недействительную форму.
context = {'topic': topic, 'form': form}
return render(request, 'learning_logs/new_entry.html', context)
Мы обновляем команду 
import
и включаем в нее только что созданный класс 
EntryForm
. Определение 
new_entry()
содержит параметр 
topic_id
для сохранения 
полученного значения из URL. Идентификатор темы понадобится для отображе-
ния страницы и обработки данных формы, поэтому мы используем 
topic_id
для 
получения правильного объекта темы 

.
В точке 

проверяется метод запроса: POST или GET. Блок 
if
выполняется для 
запроса GET, и мы создаем пустой экземпляр 
EntryForm

.
Для метода запроса POST мы обрабатываем данные, создавая экземпляр 
EntryForm

заполненный данными POST из объекта 
request

. Затем проверяется коррект-
ность данных формы. Если данные корректны, необходимо задать атрибут 
topic
объекта записи перед сохранением его в базе данных. При вызове 
save()
мы вклю-
чаем аргумент 
commit=False

для того, чтобы создать новый объект записи и со-
хранить его в 
new_entry
, не сохраняя пока в базе данных. Мы присваиваем атрибуту 
topic
объекта 
new_entry
тему, прочитанную из базы данных в начале функции 


после чего вызываем 
save()
без аргументов. В результате запись сохраняется в базе 
данных с правильно ассоциированной темой.
Вызов 
redirect()
в точке 

получает два аргумента — имя представления, кото-
рому передается управление, и аргумент для функции представления. В данном 
случае происходит перенаправление функции 
topic()
, которой должен переда-
ваться аргумент 
topic_id
. Вызов перенаправляет пользователя на страницу темы, 
для которой была создана запись, и пользователь видит новую запись в списке 
записей.
В конце функции создается словарь 
context
, а страница строится на базе шаблона 
new_entry .html
. Этот код выполняется для пустой формы или для отправленной 
формы, которая была определена как недействительная.
Шаблон new_entry
Как видно из следующего кода, шаблон 
new_entry
похож на шаблон 
new_topic
:


Редактирование данных


Достарыңызбен бөлісу:
1   ...   309   310   311   312   313   314   315   316   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет