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


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



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

428
Глава 19 • Учетные записи пользователей
Рис. 19.1.
Страница для добавления новой темы
Добавление новых записей
Теперь, когда пользователь может добавлять новые темы, он также захочет добав-
лять новые записи. Мы снова определим 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': 'Entry:'}

widgets = {'text': forms.Textarea(attrs={'cols': 80})}
Сначала в команду 
import
к 
Topic
добавляется 
Entry
. Новый класс 
EntryForm
на-
следует от 
forms.ModelForm
и содержит вложенный класс 
Meta
с указанием модели, 


Редактирование данных
429
на которой он базируется, и поле, включаемое на форму. Полю 
'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 = [
...
# Страница для добавления новой записи
path('new_entry//', views.new_entry, name='new_entry'),
]
Эта схема URL соответствует любому URL-адресу в форме 
http://localhost:8000/
new_entry/id/
, где 
id
— число, равное идентификатору темы. Код 

за-
хватывает числовое значение и сохраняет его в переменной 
topic_id
. При запросе 
URL-адреса, соответствующего этой схеме, Django передает запрос и идентифика-
тор темы функции представления 
new_entry()
.
Функция представления new_entry()
Функция представления 
new_entry
очень похожа на функцию добавления новой 
темы. Включите следующий код в файл 
views .py
:
views.py
from django.shortcuts import render, redirect
from .models import Topic
from .forms import TopicForm, EntryForm
...
def new_entry(request, topic_id):
"""Добавляет новую запись по конкретной теме."""

topic = Topic.objects.get(id=topic_id)


430

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




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

    Басты бет