19
Учетные записи
пользователей
Что является самым главным для веб-приложения? Что любой пользователь, жи-
вущий в любой стране мира, сможет создать учетную запись в вашем приложении
и начать работать с ним. В этой главе мы построим формы, на которых пользова-
тели смогут вводить свои темы и записи, а также редактировать существующие
данные. Кроме того, вы узнаете, как Django защищает приложения от распростра-
ненных атак на страницы с формами, чтобы вам не приходилось тратить много
времени на продумывание средств защиты вашего приложения.
Затем будет реализована система проверки пользователей. Мы создадим стра-
ницу регистрации, на которой пользователи смогут создавать учетные записи,
и ограничим доступ к некоторым страницам для анонимных пользователей. Затем
некоторые функции представления будут изменены так, чтобы пользователь мог
видеть только свои собственные данные. Вы узнаете, как обеспечить безопасность
и конфиденциальность данных пользователей.
Редактирование
данных
Прежде чем строить систему аутентификации пользователей для создания учетных
записей, сначала мы добавим несколько страниц, на которых пользователи смогут
вводить собственные данные. У пользователей появится возможность создавать
новые темы, добавлять новые записи и редактировать записи, сделанные ранее.
В настоящее время данные могут вводиться только суперпользователем на админи-
стративном сайте. Однако разрешать пользователям работу на административном
сайте явно нежелательно, поэтому мы воспользуемся средствами построения форм
Django для создания страниц, на которых пользователи смогут вводить данные.
Добавление новых тем
Начнем с возможности создания новых тем. Страницы на базе форм добавляются
практически так же, как и те страницы, которые мы уже строили ранее: вы опреде-
ляете URL, пишете функцию представления и создаете шаблон. Принципиальное
отличие — добавление нового модуля
forms .py
, содержащего функциональность
форм.
Редактирование данных
409
Объект ModelForm
Любая страница, на которой пользователь может вводить и отправлять инфор-
мацию, является формой, даже если на первый взгляд она на форму не похожа.
Когда пользователь вводит информацию, необходимо проверить, что он ввел
корректные данные, а не вредоносный код (например, код для нарушения ра-
боты сервера). Затем проверенная информация обрабатывается и сохраняется
в нужном месте базы данных. Django автоматизирует б
у
льшую часть этой
работы.
Простейший способ построения форм в Django основан на использовании класса
ModelForm
, который автоматически строит форму на основании моделей, опреде-
ленных в главе 18. Ваша первая форма будет создана в файле
forms .py
, который
должен находиться в
одном каталоге с
models .py
:
forms.py
from django import forms
from .models
import Topic
class TopicForm(forms.ModelForm):
class Meta:
model = Topic
fields = ['text']
labels = {'text': ''}
Сначала импортируется модуль
forms
и модель, с которой мы будем работать:
Topic
. В точке
определяется класс с именем
TopicForm
, наследующий от
forms.
ModelForm
. Простейшая версия
ModelForm
состоит из вложенного класса
Meta
,
который сообщает Django, на какой модели должна базироваться форма и какие
поля на ней должны находиться. В точке
форма создается на базе модели
Topic
,
а на ней размещается только поле
text
. Код
приказывает Django не генериро-
вать подпись для текстового поля.
URL-адрес для new_topic
URL-адрес новой страницы должен быть простым и содержательным, поэтому
после того, как пользователь выбрал команду создания новой темы, он направля-
ется по адресу
http://localhost:8000/new_topic/
. Ниже приведена схема URL для
страницы
new_topic
, которая добавляется в
learning_logs/urls .py
:
urls.py
...
urlpatterns = [
...
# Страница
для добавления новой темы
url(r'^new_topic/$', views.new_topic, name='new_topic'),
]
Эта схема URL будет отправлять запросы функции представления
new_topic()
,
которую мы сейчас напишем.