УПРАЖНЕНИЯ
19-3 . Рефакторинг: в views .py есть два места, в которых программа проверяет, что пользо-
ватель, связанный с темой, является текущим пользователем . Поместите код этой проверки
в функцию с именем check_topic_owner() и вызовите эту функцию при необходимости .
19-4 . Защита new_entry: пользователь может попытаться добавить новую запись в журнал
другого пользователя, вводя URL-адрес с идентификатором темы, принадлежащей друго-
му пользователю . Чтобы предотвратить подобные атаки, перед сохранением новой записи
проверьте, что текущий пользователь является владельцем темы, к которой относится за-
пись .
19-5 . Защищенный блог: в проекте Blog примите меры к тому, чтобы каждое сообщение
в блоге было связано с конкретным пользователем . Убедитесь в том, что чтение всех со-
общений доступно всем пользователям, но только зарегистрированные пользователи могут
создавать новые и редактировать существующие сообщения . В представлении, в котором
пользователи редактируют сообщения, перед обработкой формы убедитесь в том, что ре-
дактируемое сообщение принадлежит именно этому пользователю .
Итоги
В этой главе вы научились использовать формы для создания новых тем и за-
писей, а также редактирования существующих данных. Далее мы перешли к ре-
ализации системы учетных записей. Вы предоставили существующим пользова-
436 Глава 19 • Учетные записи пользователей
телям возможность начинать и завершать сеанс работы с приложением, а также
научились использовать класс Django
UserCreationForm
для создания новых
учетных записей.
После создания простой системы аутентификации и регистрации пользователей
вы ограничили доступ пользователей к некоторым страницам; для этого исполь-
зовался декоратор
@login_required
. Затем данные были связаны с конкретными
пользователями при помощи отношения внешнего ключа. Вы также узнали,
как выполнить миграцию базы данных, когда миграция требует ввести данные
по умолчанию.
В последней части главы вы узнали, как ограничить состав данных, просматрива-
емых пользователем, с использованием функций представления. Для чтения со-
ответствующих данных использовался метод
filter()
, а владелец запрашиваемых
данных сравнивался с текущим пользователем.
Не всегда бывает сразу понятно, какие данные должны быть доступны всем поль-
зователям, а какие данные следует защищать, но этот навык приходит с практикой.
Решения, принятые нами в этой главе для защиты данных пользователей, наглядно
показывают, почему при построении проекта желательно работать в команде: если
кто-то просматривает код вашего проекта, это повышает вероятность выявления
плохо защищенных областей.
К настоящему моменту мы построили полностью функционирующий проект, ра-
ботающий на локальной машине. В последней главе мы доработаем оформление
приложения Learning Log, чтобы оно выглядело более привлекательно. Также про-
ект будет развернут на сервере, чтобы любой пользователь с доступом к Интернету
мог зарегистрироваться и создать учетную запись.
20
Оформление
и развертывание
приложения
Приложение Learning Log уже вполне работоспособно, но оно не имеет стилевого
оформления и работает только на локальной машине. В этой главе мы определим
для проекта простое, но профессиональное оформление, а затем развернем его
на сервере, чтобы любой желающий мог создать учетную запись.
Для стилевого оформления будет использоваться библиотека Bootstrap — набор
инструментов для оформления веб-приложений, с которыми они будут выглядеть
профессионально на любых современных устройствах, от большого монитора с пло-
ским экраном до смартфона. Для этого мы воспользуемся приложением
django-
bootstrap3
, а вы заодно потренируетесь в использовании приложений, созданных
другими разработчиками Django.
Для развертывания Learning Log будет использоваться Heroku — сайт, по-
зволяющий загрузить ваш проект на один из его серверов, чтобы сделать его
доступным для любого пользователя с подключением к Интернету. Также
мы начнем пользоваться системой контроля версий Git для отслеживания
изменений в проекте.
Когда работа с Learning Log будет завершена, вы будете уметь разрабатывать про-
стые веб-приложения, придавать им качественный внешний вид и развертывать
их на работающих серверах. Также по мере накопления опыта вы научитесь поль-
зоваться ресурсами с материалами более высокого уровня.
Оформление приложения Learning Log
До сих пор мы намеренно игнорировали оформление приложения, чтобы сосредо-
точиться на его функциональности. И это вполне разумный подход к разработке,
потому что приложение приносит пользу только в том случае, если оно работает.
Конечно, когда приложение начинает работать, оформление выходит на первый
план, чтобы пользователи захотели работать с ним.
В этом разделе я кратко опишу приложение
django-bootstrap3
и покажу, как ин-
тегрировать его в проект и подготовить к развертыванию.
438 Глава 20 • Оформление и развертывание приложения
Приложение django-bootstrap3
Для интеграции Bootstrap в наш проект будет использоваться приложение
django-
bootstrap3
. Это приложение загружает необходимые файлы Bootstrap, размещает
их в правильных каталогах проекта и предоставляет доступ к стилевым директивам
в шаблонах проекта.
Чтобы установить
django-bootstrap3
, введите следующую команду в активной
виртуальной среде:
(ll_env)learning_log$ pip install django-bootstrap3
...
Successfully installed django-bootstrap3
Затем необходимо добавить следующий код для включения
django-boostrap3
в список
INSTALLED_APPS
в файле
settings .py
:
settings.py
...
INSTALLED_APPS = (
...
'django.contrib.staticfiles',
# Сторонние приложения
'bootstrap3',
# Мои приложения
'learning_logs',
'users',
)
...
Создайте новую секцию для приложений, созданных другими разработчиками,
и включите в нее запись
'bootstrap3'
. Обычно приложения должны включаться
в
INSTALLED_APPS
,но для надежности прочитайте инструкции по установке кон-
кретного приложения.
Приложение
django-bootstrap3
должно включать jQuery — библиотеку JavaScript,
которая содержит некоторые интерактивные элементы, предоставляемые шабло-
ном Bootstrap. Добавьте следующий код в конец
settings .py
:
settings.py
...
# Мои настройки
LOGIN_URL = '/users/login/'
# Настройки django-bootstrap3
BOOTSTRAP3 = {
'include_jquery': True,
}
Этот фрагмент избавляет вас от необходимости загружать библиотеку jQuery и раз-
мещать ее в правильном каталоге вручную.
Оформление приложения Learning Log 439
Использование Bootstrap для оформления Learning Log
По сути Bootstrap представляет собой большой набор инструментов стилевого
оформления. Также библиотека содержит ряд шаблонов, которые можно при-
менить к проекту для формирования общего стиля. Если вы только начинаете
работать с Bootstrap, вам будет намного проще воспользоваться этими шаблона-
ми, чем использовать отдельные инструменты оформления. Чтобы просмотреть
шаблоны, предоставляемые Bootstrap, перейдите в раздел
Getting
Started
на сайте
http://getbootstrap.com/; прокрутите страницу до заголовка
Examples
и найдите
раздел
Navbars
in
action
. Мы воспользуемся шаблоном
Static
top
navbar
, который
предоставляет простую панель навигации у верхнего края, заголовок страницы
и контейнер для ее содержимого.
На рис. 20.1 показано, как будет выглядеть домашняя страница после применения
шаблона Bootstrap к
base .html
и незначительного изменения
index .html
.
Достарыңызбен бөлісу: |