Книга «Изучаем Python»



Pdf көрінісі
бет249/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   245   246   247   248   249   250   251   252   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 19 • Учетные записи пользователей
мой; в данном случае данные возвращаются функции представления 
new_topic()

Аргумент 
method
приказывает браузеру отправить данные в запросе типа POST.
Django использует шаблонный тег 
{%
csrf_token
%}

для предотвращения по-
пыток получения несанкционированного доступа к серверу (атаки такого рода 
называются 
межсайтовой подделкой запросов
). В точке 

отображается форма; 
это наглядный пример того, насколько легко в Django выполняются такие стан-
дартные операции, как отображение формы. Чтобы автоматически создать все 
поля, необходимые для отображения формы, достаточно включить шаблонную 
переменную 
{{
form.as_p
}}
. Модификатор 
as_p
приказывает Django отобра-
зить все элементы формы в формате абзацев — это простой способ аккуратного 
отображения формы.
Django не создает кнопку отправки данных для форм, поэтому мы определяем ее 
в точке 

.
Создание ссылки на страницу new_topic
Далее ссылка на страницу 
new_topic
создается на странице 
topics
:
topics.html
{% extends "learning_logs/base.html" %}
{% block content %}
Topics

    ...

Add a new topic:
{% endblock content %}
Разместите ссылку после списка существующих тем. Полученная форма изобра-
жена на рис. 19.1. Воспользуйтесь ею и добавьте несколько своих тем.
Рис. 19.1.
Страница для добавления новой темы


Редактирование данных
413
Добавление новых записей
Теперь, когда пользователь может добавлять новые темы, он также захочет добав-
лять новые записи. Мы снова определим URL, напишем новую функцию и шаблон 
и создадим ссылку на страницу. Но сначала нужно добавить в 
forms .py
еще один 
класс.
Класс EntryForm
Мы должны создать форму, связанную с моделью 
Entry
, но более специализиро-
ванную по сравнению с 
TopicForm
:
forms.py
from django import forms
from .models import Topic, Entry
class TopicForm(forms.ModelForm):
...
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['text']
 
labels = {'text': ''}
 
widgets = {'text': forms.Textarea(attrs={'cols': 80})}
Сначала в команду 
import
к 
Topic
добавляется 
Entry
. Новый класс 
EntryForm
на-
следует от 
forms.ModelForm
и содержит вложенный класс 
Meta
с указанием модели, 
на которой он базируется, и поле, включаемое в форму. Полю 
'text'
снова назна-
чается пустая надпись 

.
В точке 

включается атрибут 
widgets

Виджет
(widget) представляет собой эле-
мент формы HTML: однострочное или многострочное текстовое поле, раскрываю-
щийся список и т. д. Включая атрибут 
widgets
, вы можете переопределить виджеты, 
выбранные Django по умолчанию. Приказывая Django использовать элемент 
forms.
Textarea
, мы настраиваем виджет ввода для поля 
'text'
, чтобы ширина текстовой 
области составляла 80 столбцов вместо значения по умолчанию 40. У пользователя 
будет достаточно места для создания содержательных записей.
URL-адрес для new_entry
Необходимо включить аргумент 
topic_id
в URL-адрес для создания новой записи, 
потому что запись должна ассоциироваться с конкретной темой. Вот как выглядит 
URL, который мы добавляем в 
learning_logs/urls .py
:
urls.py
...
urlpatterns = [
...
# Страница для добавления новой записи
url(r'^new_entry/(?P\d+)/$', views.new_entry, name='new_entry'),
]


414

Достарыңызбен бөлісу:
1   ...   245   246   247   248   249   250   251   252   ...   266




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

    Басты бет