Опубликован: 25.01.2016 | Уровень: для всех | Доступ: платный | ВУЗ: Российский Новый Университет
Лекция 10:

Расширяя Django

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Защита от поддельного межсайтового запроса

Мы обсуждали способы предотвращения двух типов веб-атак в лекции 5а именно, SQL инъекций и межсайтовых сценариев. Django обеспечивает защиту от атак, называется поддельный межсайтовый запрос. В этой атаке вредоносный сайт пытается манипулировать вашим приложением, обманывая пользователя, который вошел в систему на вашем сайте, чтобы открыть специально созданную страницу. Эта страница обычно содержит код JavaScript, который пытается отправить форму на ваш сайт. CSRF защита работает путем встраивания токена (это секретный код) во все формы и проверяет токен при отправке формы. Это делает фактически неосуществимым CSRF-атаки. Чтобы активировать защиту от CSRF, вам просто нужно добавить параметр 'django.contrib.csrf.middleware.CsrfMiddleware' в переменную MIDDLEWARE_CLASSES и это будет работать, прозрачно, для предотвращения CSRF-атак.

Система сообщений

Наше приложение позволяет пользователям добавлять друг друга как друзей и отслеживать закладки друг друга. Хотя эти две формы коммуникации, связаны с природой нашего приложения для закладок, иногда пользователи хотят иметь гибкость отправки личных сообщений друг другу. Эта функция особенно полезна для укрепления социального аспекта нашего веб-сайта.

Система сообщений может осуществляться различными путями. Это может быть так же просто, как предоставление каждому пользователю контактную форму, которая работает, посылая его содержание на электронную почту пользователя при отправке сообщения.У вас уже есть вся информация, необходимая для создания компонентов данной функциональности:

  • Форма сообщения с текстовым полем для темы и текстовая области для тела сообщения
  • Представление, которое отображает форму сообщения пользователя и посылает его содержание через функцию send_mail()

Когда вы разрешаете пользователю отправлять электронную почту через ваш сайт, вам нужно быть осторожным во избежание злоупотребления этой функцией. Здесь вы можете ограничить контактные формы только для зарегистрированных пользователей или только для друзей.

Другой подход к реализации системы сообщений осуществляется с помощью хранения и управления сообщениями в базе данных. Таким образом, пользователи могут отправлять и просматривать сообщения, с помощью самого нашего приложения вместо использования электронной почты. Хотя этот подход более привязан к нашему приложению, и тем самым он держит пользователей на нашем веб-сайте, он включает в себя больше работы над имплементацией. Однако как и в случае предыдущего подхода, вас уже есть все сведения, необходимые и для имплементации этого подхода. Здесь необходимы следующие компоненты:

  • Модель данных для хранения сообщений. Она должна содержать поля отправитель, получатель, тема и тело. Вы также можете добавить поля для даты, чтения статуса и так далее.
  • Форма для создания сообщений. Необходимы поля тело сообщения и тема.
  • Представление списка доступных сообщений.
  • Представление отображения сообщения.

Предыдущий список является лишь одним способом, который используется для имплементации системы сообщений. Можно, например, соединять представления списка и сообщения в одно представление или отображать посланные сообщения вместе с полученными. Возможности многочисленны и зависят от того, насколько продвинутую систему вы хотите получить.

Система подписки

Мы предлагаем несколько веб-фидов, которые позволяют пользователям следить за обновлениями на нашем сайте. Однако некоторые пользователи могут по-прежнему предпочитают старый способ мониторинга обновлений по электронной почте. Для этих пользователей вы можете имплементировать систему подписки по электронной почте к приложению. Например можно позволить пользователям получать уведомления, когда друг опубликовал закладку, или когда закладка размещена под определенного тегом.

Кроме того можно сгруппировать такие уведомления и отправить пакетно, чтобы избежать отправки большого количества сообщений электронной почты. Детали имплементации этой функции во многом зависят от того, как вы хотите, чтобы это работало. Это может быть как простая модель данных, которая хранит теги, на которые каждый пользователь подписывается. Она будет иметь цикл, который перебирает всех пользователей, которые являются подписчиками определенного тега и отправляет уведомления для них, когда закладка размещена под этим тегом. Этот подход, однако, слишком простой и генерирует много электронных писем. Более сложный подход может включать хранение уведомления в модели данных и отправление их на один адрес электронной почты ежедневно.

Оценки пользователя

Некоторые веб-сайты (такие как Slashdot.org и reddit.com) измеряют активность пользователей путем присвоения баллов для каждого пользователя. Эта оценка увеличивается всякий раз, когда пользователь вносит вклад в сайт различным путем. Оценки пользователей могут быть использованы различными способами. Например, можно выпустить новые возможности для наиболее активных пользователей сначала или обеспечить другие преимущества для активных пользователей, которые будут мотивировать других пользователей вносить больший вклад для вашего веб-сайта.

Имплементировать оценку пользователя довольно просто. Вам нужна модель данных для сохранения результатов в базе данных. После этого можно использовать API модель Django для доступа и управления оценкой в пределах представления.

Контрольные вопросы

  1. Для чего требуется создавать карту сайта?
  2. Какие цели преследуются при использовании общих представлений на основе классов?
  3. От каких атак Django обеспечивает защиту?
  4. Для чего нужна оценка пользователя?
  5. Что такое вложенные под-фреймворки?

Упражнения

Упражнение 1.

Реализовать карту сайта в проекте

Упражнение 2.

Создайте систему подписки

Упражнение 3.

Реализуйте оценивание твитов пользователями

Упражнение 4.

Создать систему сообщений для прокета

Список курсовых работ

  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа системы модерации твитов
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа системы регистрации пользователей
  • Разработка комплекта пользовательских фильтров и шаблонов для продвинутой системы комментирования
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа системы ведения пользовательских блогов
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа сервиса мгновенного обмена собщениями
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа веб-сервиса для хранения изображений
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа веб-сервиса электронной почты
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа сервиса для ведения списка ежедневных дел
  • Разработка комплекта пользовательских фильтров и шаблонов для прототипа сервиса для учета рабочего времени
  • Разработка комплекта пользовательских фильтров и шаблонов для приложения для твитов

Краткие итоги

  • рассмотреть принцип создания пользовательских шаблонов тегов
  • рассмотреть принцип создания пользовательских фильтров
  • ознакомиться с общими представлениями на основе классов
  • ознакомиться с целями использования общих представлений на основе классов
  • ознакомиться с вложенными под-фреймворками и их основными параметрами
  • рассмотреть принципы создания оценок пользователя
  • рассмотреть защиту от межузловых запросов
  • ознакомиться с системой сообщений
  • ознакомиться с системой подписки
  • ознакомиться с подфреймворком для создания карты сайтов
< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.

Дмитрий Молокоедов
Дмитрий Молокоедов
Россия, Новосибирск, НГПУ, 2009
Акбар Ахвердов
Акбар Ахвердов
Россия, г. Москва