Цель лекции: Рассмотреть принцип создания пользовательских шаблонов тегов и фильтров, ознакомиться с общими представлениями на основе классов, ознакомиться с вложенными подфреймворками и их основными параметрами.
Ключевые термины: django, фильтр, фреймворк, тег, сообщение, шаблон, модель, пользователь, система, форма, представление, данные, приложение, url, строка
Для вас это было долгое путешествие, и мы поработали со множеством кода и основными концепциями, относящимися к функциональности Django. В этой лекции мы обсудим Django немного больше, если сказать вкратце, различные параметры, такие как настраиваемые теги, фильтры, структуры, системы сообщений и так далее.
Система шаблонов Django поставляется с множеством шаблонов тегов и фильтрами, которые делают написание шаблонов легкой и гибкой работой. Иногда, вы, возможно, захотите расширить систему шаблонов собственными тегами и фильтрами. Это обычно происходит, когда вы находите повторяющуюся структуру одного и того же тега множество раз, когда вы хотите обернуть структуру в единый тег, или даже тогда, когда у вас есть фильтр, который вы хотите добавить в систему шаблонов.
Угадайте, что? Django уже позволяет вам сделать это, и это довольно легко! Вы в основном добавите новый пакет к вашему приложению, назовете его templatetags и положите модули, которые содержат теги и фильтры в него. Давайте узнаем об этом, добавив фильтр, который использует строку. Добавим каталог templatetags в родительский каталог mytweets и положим пустой файл под названием_ init_.py туда, так чтобы Python рассматривал каталог как пакет. Теперь создайте модуль под названием mytweet_filters в нем. Мы собираемся написать наш фильтр в этом модуле Вот пример структуры каталога:
templatetags / |--init .py |--mytweet_filters.py
Теперь добавьте следующий код к файлу mytweet_filters.py:
from django import template register = template.Library() ©register.filter def capitalize(value): return value.capitalize()
Переменная register является объектом, который может использоваться для введения новых тегов и фильтров в систему шаблонов. Здесь мы использовали декоратор register.filter для добавления функции смены прописных букв в качестве фильтра.
Чтобы использовать новый фильтр из внутри шаблона, добавьте следующую строку в начало вашего файла шаблона:
{% load mytweet_filters %}
Затем можно использовать новый фильтр так же, как любой другой фильтр, предлагаемый Django:
Hi {{ name|capitalize }}!
Добавление пользовательского шаблона тегов работает аналогично с фильтрами. В основном, вы определяете методы для обработки тегов и затем регистрируете тег, чтобы сделать его доступным для шаблонов. Этот процесс немного сложнее, потому что теги могут быть более сложными, чем фильтры. Дополнительную информацию о пользовательских шаблонах тегов доступны в документации по Django
При написании пользовательского фильтра, вы должны заботиться о поведении авто-исключения Django с фильтром. Существует три типа строк, которые могут быть переданы в фильтр:
Во время работы с Django, вы заметите, что существуют определенные типы представлений, которые всегда необходимы независимо от проекта, над которым вы работаете. По этой причине Django поставляется с набором представлений, которые можно использовать в любом проекте. Эти представления называются общие представления.
Django предоставляет общие представления для следующих целей:
Представления Django на основе классов можно настроить путем определения подклассов, или путем передачи аргументов непосредственно в URL-адрес conf.
Подклассы полны соглашений, которые устраняют хлопоты, связанные, чтобы переписать шаблоны в самых распространенных ситуациях. Когда вы используете подкласс можно переопределить атрибут или методы основного класса, подставив новое значение:
#app_name/views.py from django.views.generic import TemplateView class ContactView(TemplateView): template_name = "contact.html"
Мы также добавим эту запись в файл urls.py, чтобы получить перенаправление:
project/urls.py
from django.conf.urls.defaults import *
from some_app.views import ContactView
urlpattems = patterns ('
(r''connect/', ContactView.as_view()),
)
Интересно, что мы можем достичь того же самого, изменив файл и добавив несколько строк в файл urls.py:
from django.conf.urls.defaults import *
from django.views.generic import TemplateView
urlpattems = patterns('',
(ur1'contact/', TemplateView.as_view (template_name="contact.html") ) ,
)
Пакет Django.contrib содержит стандартную библиотеку Django. Мы использовали следующие подфреймворки из этого пакета в предыдущих главах этой книги:
Эти вложенные фреймворки очень упрощают нашу работу, независимо от того, создаем ли мы регистрацию и проверки подлинности, создаем страницу администрирования или предоставляем фиды для нашего содержимого. Пакет Django.contrib является очень важной частью Django. Знание его подпакетов и того, как их использовать, сэкономит вам много времени и усилий.
Этот раздел предоставит вам краткое введение в другие фреймворки в данном пакете. Не буду вдаваться в подробности о том, как пользоваться каждым фреймворком, но вы узнаете достаточно, чтобы знать, когда использовать фреймворк. После того, как вы захотите использовать фреймворки в проекте, вы можете прочитать онлайн-документацию, чтобы узнать больше о нем.
Веб-приложения могут содержать страницы, которые являются статическими по природе. Например, ваш сайт может включать набор страниц справки, которые редко изменяются. Django предоставляет приложение под названием flatpages для обслуживания статических страниц. Приложение является довольно простым; оно предоставляет вам модель данных для хранения различных битов информации о каждой странице, включая следующие:
Чтобы использовать приложение, можно просто включить его в переменную INSTALLED_APPS в файле settings.py его middleware в переменную MIDDLEWARE_CLASSES. После этого можно хранить и управлять статическими страницами с помощью модели данных, предоставленной приложением flatpages.
Приложение humanize предлагает набор фильтров для добавления прикосновения человека к вашим страницам. Вот список доступных фильтров:
4500 становится 4500.
45000 становится 45,000.
450000 становится 450,000.
4500000 становится 4,500,000.
1000000 становится 1,0 млн.
1200000 становится 1,2 млн.
1200000000 становится 1,2 млрд.
25 Янв 2007 вчера.
26 Янв 2007 сегодня
27 Янв 2007 завтра
26 Jan 2007 16:30:00 сейчас.
26 Jan 2007 16:29:31 29 seconds ago.
26 Jan 2007 16:29:31 29 seconds ago.
26 Jan 2007 16:25:35 4 минуты назад
26 Jan 2007 15:30:29 59 минут назад
26 Jan 2007 15:30:01 59 минут назад
26 Jan 2007 15:30:00 1 час назад
26 Jan 2007 13:31:29 2 часа назад
25 Jan 2007 13:31:29 1 день, 2 часа назад
25 Jan 2007 13:30:01 1 день, 2 часа назад
25 Jan 2007 13:30:00 1 день, 3 часа назад
26 Jan 2007 16:30:30 будет через 30 секунд
26 Jan 2007 16:30:29 будет через 30 секунд
26 Jan 2007 16:31:00 будет через 1 минуту
26 Jan 2007 16:34:35 будет через 4 минуты
26 Jan 2007 17:30:29 будет через 1 час
26 Jan 2007 18 : 31:29 будет через 2 часа
27 Jan 2007 16 : 31:29 будет через 1 день
Sitemap — это фреймворк для создания карты сайтов, являющихся XML-файлами, которые помогают индексаторам поисковых движков находить динамические страницы на вашем сайте. Он указывает индексатору насколько страница важна и как часто она меняется. Эта информация делает процесс индексирования более точным и эффективным.
Фреймворк sitemaps позволяет выразить предыдущую информацию в коде Python , а затем генерирует XML-документ, который представляет карту вашего сайта. Это охватывает все наиболее часто используемые фреймворки из пакета django contrib. В пакете содержатся дополнительные приложения, которые не так важны, как предыдущие и он время от времени обновляется с новыми приложениями. Для того, чтобы узнать о любом приложения из пакета django contrib, вы можете всегда прочитать его документацию, которая доступна онлайн.
Мы обсуждали способы предотвращения двух типов веб-атак в лекции 5а именно, SQL инъекций и межсайтовых сценариев. Django обеспечивает защиту от атак, называется поддельный межсайтовый запрос. В этой атаке вредоносный сайт пытается манипулировать вашим приложением, обманывая пользователя, который вошел в систему на вашем сайте, чтобы открыть специально созданную страницу. Эта страница обычно содержит код JavaScript, который пытается отправить форму на ваш сайт. CSRF защита работает путем встраивания токена (это секретный код) во все формы и проверяет токен при отправке формы. Это делает фактически неосуществимым CSRF-атаки. Чтобы активировать защиту от CSRF, вам просто нужно добавить параметр 'django.contrib.csrf.middleware.CsrfMiddleware' в переменную MIDDLEWARE_CLASSES и это будет работать, прозрачно, для предотвращения CSRF-атак.
Наше приложение позволяет пользователям добавлять друг друга как друзей и отслеживать закладки друг друга. Хотя эти две формы коммуникации, связаны с природой нашего приложения для закладок, иногда пользователи хотят иметь гибкость отправки личных сообщений друг другу. Эта функция особенно полезна для укрепления социального аспекта нашего веб-сайта.
Система сообщений может осуществляться различными путями. Это может быть так же просто, как предоставление каждому пользователю контактную форму, которая работает, посылая его содержание на электронную почту пользователя при отправке сообщения.У вас уже есть вся информация, необходимая для создания компонентов данной функциональности:
Когда вы разрешаете пользователю отправлять электронную почту через ваш сайт, вам нужно быть осторожным во избежание злоупотребления этой функцией. Здесь вы можете ограничить контактные формы только для зарегистрированных пользователей или только для друзей.
Другой подход к реализации системы сообщений осуществляется с помощью хранения и управления сообщениями в базе данных. Таким образом, пользователи могут отправлять и просматривать сообщения, с помощью самого нашего приложения вместо использования электронной почты. Хотя этот подход более привязан к нашему приложению, и тем самым он держит пользователей на нашем веб-сайте, он включает в себя больше работы над имплементацией. Однако как и в случае предыдущего подхода, вас уже есть все сведения, необходимые и для имплементации этого подхода. Здесь необходимы следующие компоненты:
Предыдущий список является лишь одним способом, который используется для имплементации системы сообщений. Можно, например, соединять представления списка и сообщения в одно представление или отображать посланные сообщения вместе с полученными. Возможности многочисленны и зависят от того, насколько продвинутую систему вы хотите получить.
Мы предлагаем несколько веб-фидов, которые позволяют пользователям следить за обновлениями на нашем сайте. Однако некоторые пользователи могут по-прежнему предпочитают старый способ мониторинга обновлений по электронной почте. Для этих пользователей вы можете имплементировать систему подписки по электронной почте к приложению. Например можно позволить пользователям получать уведомления, когда друг опубликовал закладку, или когда закладка размещена под определенного тегом.
Кроме того можно сгруппировать такие уведомления и отправить пакетно, чтобы избежать отправки большого количества сообщений электронной почты. Детали имплементации этой функции во многом зависят от того, как вы хотите, чтобы это работало. Это может быть как простая модель данных, которая хранит теги, на которые каждый пользователь подписывается. Она будет иметь цикл, который перебирает всех пользователей, которые являются подписчиками определенного тега и отправляет уведомления для них, когда закладка размещена под этим тегом. Этот подход, однако, слишком простой и генерирует много электронных писем. Более сложный подход может включать хранение уведомления в модели данных и отправление их на один адрес электронной почты ежедневно.
Некоторые веб-сайты (такие как Slashdot.org и reddit.com) измеряют активность пользователей путем присвоения баллов для каждого пользователя. Эта оценка увеличивается всякий раз, когда пользователь вносит вклад в сайт различным путем. Оценки пользователей могут быть использованы различными способами. Например, можно выпустить новые возможности для наиболее активных пользователей сначала или обеспечить другие преимущества для активных пользователей, которые будут мотивировать других пользователей вносить больший вклад для вашего веб-сайта.
Имплементировать оценку пользователя довольно просто. Вам нужна модель данных для сохранения результатов в базе данных. После этого можно использовать API модель Django для доступа и управления оценкой в пределах представления.
Контрольные вопросы
Упражнения
Упражнение 1.
Реализовать карту сайта в проекте
Упражнение 2.
Создайте систему подписки
Упражнение 3.
Реализуйте оценивание твитов пользователями
Упражнение 4.
Создать систему сообщений для прокета
Список курсовых работ
Краткие итоги
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.