УПРАЖНЕНИЯ
19.3. Рефакторинг:
в
views .py
есть два места, в которых программа проверяет, что пользова-
тель, связанный с темой, является текущим пользователем. Поместите код этой проверки
в функцию с именем
check_topic_owner()
и вызовите эту функцию при необходимости.
19.4. Защита new_entry:
пользователь может попытаться добавить новую запись в журнал
другого пользователя, вводя URL-адрес с идентификатором темы, принадлежащей друго-
му пользователю. Чтобы предотвратить подобные атаки, перед сохранением новой запи-
си проверьте, что текущий пользователь является владельцем темы, к которой относится
запись.
19.5. Защищенный блог:
в проекте Blog примите меры к тому, чтобы каждое сообщение
в блоге было связано с конкретным пользователем. Убедитесь в том, что чтение всех со-
общений доступно всем пользователям, но только зарегистрированные пользователи могут
создавать новые и редактировать существующие сообщения. В представлении, в котором
пользователи редактируют сообщения, перед обработкой формы убедитесь в том, что ре-
дактируемое сообщение принадлежит именно этому пользователю.
Итоги
В этой главе вы научились использовать формы для создания новых тем и записей,
а также редактирования существующих данных. Далее мы перешли к реализации
системы учетных записей. Вы предоставили существующим пользователям воз-
можность начинать и завершать сеанс работы с приложением, а также научились
использовать класс Django
UserCreationForm
для создания новых учетных записей.
Итоги
453
После создания простой системы аутентификации и регистрации пользователей вы
ограничили доступ пользователей к некоторым страницам; для этого использовался
декоратор
@login_required
. Затем данные были связаны с конкретными пользова-
телями при помощи отношения внешнего ключа. Вы также узнали, как выполнить
миграцию базы данных, когда миграция требует ввести данные по умолчанию.
В последней части главы вы узнали, как ограничить состав данных, просматрива-
емых пользователем, с использованием функций представления. Для чтения со-
ответствующих данных использовался метод
filter()
, а владелец запрашиваемых
данных сравнивался с текущим пользователем.
Не всегда бывает сразу понятно, какие данные должны быть доступны всем поль-
зователям, а какие данные следует защищать, но этот навык приходит с практикой.
Решения, принятые нами в этой главе для защиты данных пользователей, наглядно
показывают, почему при построении проекта желательно работать в команде: если
кто-то просматривает код вашего проекта, это повышает вероятность выявления
плохо защищенных областей.
К настоящему моменту мы построили полностью функциональный проект, рабо-
тающий на локальной машине. В последней главе мы доработаем оформление при-
ложения Learning Log, чтобы оно выглядело более привлекательно. Также проект
будет развернут на сервере, чтобы любой пользователь с доступом к интернету мог
зарегистрироваться и создать учетную запись.
20
Оформление
и развертывание
приложения
Приложение Learning Log уже вполне работоспособно, но оно не имеет стилевого
оформления и работает только на локальной машине. В этой главе мы определим
для проекта простое, но профессиональное оформление, а затем развернем его на
сервере, чтобы любой желающий мог создать учетную запись.
Для стилевого оформления будет использоваться библиотека Bootstrap — набор
инструментов для оформления веб-приложений, с которыми они будут выглядеть
профессионально на любых современных устройствах, от большого монитора с пло-
ским экраном до смартфона. Для этого мы воспользуемся приложением
django-
bootstrap4
, а вы заодно потренируетесь в использовании приложений, созданных
другими разработчиками Django.
Для развертывания Learning Log будет использоваться Heroku — сайт, позволяю-
щий загрузить ваш проект на один из его серверов, чтобы сделать его доступным
для любого пользователя с подключением к интернету. Также мы начнем поль-
зоваться системой контроля версий Git для отслеживания изменений в проекте.
Когда работа с Learning Log будет завершена, вы будете уметь разрабатывать про-
стые веб-приложения, придавать им качественный внешний вид и развертывать
их на работающих серверах. Также по мере накопления опыта вы научитесь поль-
зоваться ресурсами с материалами более высокого уровня.
Оформление приложения Learning Log
До сих пор мы намеренно игнорировали оформление приложения, чтобы сосредо-
точиться на его функциональности. И это вполне разумный подход к разработке,
потому что приложение приносит пользу только в том случае, если оно работает.
Конечно, когда приложение начинает работать, оформление выходит на первый
план, чтобы пользователи захотели работать с ним.
В этом разделе я кратко опишу приложение
django-bootstrap4
и покажу, как ин-
тегрировать его в проект и подготовить к развертыванию.
Оформление приложения Learning Log
455
Приложение django-bootstrap4
Для интеграции Bootstrap в наш проект будет использоваться приложение
django-
bootstrap4
. Это приложение загружает необходимые файлы Bootstrap, размещает
их в правильных каталогах проекта и предоставляет доступ к стилевым директивам
в шаблонах проекта.
Чтобы установить
django-bootstrap4
, введите следующую команду в активной
виртуальной среде:
(ll_env)learning_log$
Достарыңызбен бөлісу: |