Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Встроенные компоненты

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

Компонент поддержки аутентификации

Класс компонента django.contrib.auth.middleware.AuthenticationMiddleware.

Этот компонент включает механизм поддержки аутентификации. Он добавляет атрибут request.user, представляющий текущего авторизованного пользователя, в каждый входящий объект HttpRequest.

Данный компонент описан в главе «Сессии, пользователи и регистрация».

Стандартный компонент

Класс компонента: django.middleware.common.CommonMiddleware.

Этот компонент добавляет несколько удобств для перфекционистов:

  • Запрещает доступ для пользовательских агентов, перечисленных в параметре DISALLOWED_USER_AGENTS: Если этот параметр определён в файле конфигурации, он должен быть представлен в виде списка объектов скомпилированных регулярных выражений, которые будут применяться к заголовкам пользовательских агентов для каждого входящего запроса. Ниже показан пример с частью конфигурационного файла:

    import re
    
    DISALLOWED_USER_AGENTS = (
        re.compile(r'^OmniExplorer_Bot'),
        re.compile(r'^Googlebot')
    )
    

    Следует отметить использование import re, оно необходимо для компилирования регулярных выражений (обратите внимание на re.compile()). Так как файл конфигурации является кодом на языке Python, можно спокойно использовать оператор include в нём.

  • Выполняет перезапись URL, основываясь на параметрах APPEND_SLASH и PREPEND_WWW: Если параметр APPEND_SLASH имеет значение True, то URL у которых отсутствует завершающий слэш (но нет точки в последнем компоненте пути) будут перенаправляться на тот же URL только с завершающим слэшом. Таким образом, foo.com/bar будет перенаправлен на foo.com/bar/, а foo.com/bar/file.txt пройдёт не изменённым.

    Если параметр PREPEND_WWW имеет значение True, то URL, которые не имеют префикса www., будут перенаправлены на URL с этим префиксом.

    Оба параметра нужны для нормализации URL. Философия такова, что каждый URL должен существовать в одном и только одном месте. С технической точки зрения URL example.com/bar является отдельным представлением от example.com/bar/, которое в свою очередь — от www.example.com/bar/. Индексаторы поисковых движков будут рассматривать эти URL как отдельные, что отрицательно скажется на рейтинге вашего сайта на этом поисковике. Так что нормализация URL приносит пользу.

  • Обработка ETags на основе параметра USE_ETAGS: Etags являются оптимизацией HTTP уровня для условного кэширования страниц. Если параметр USE_ETAGS имеет значение True, Django будет вычислять Etag для каждого запроса, выполняя MD5-хэширование содержимого страницы, и заботиться об отправки откликов «Не изменилось», если это так.

    Следует отметить существование также компонента для условного GET, который поддерживает Etags и кое-что ещё.

Компонент компрессии

Класс компонента: django.middleware.gzip.GZipMiddleware.

Этот компонент автоматически сжимает содержимое страниц для браузеров, которые поддерживают алгоритм gzip (все современные браузеры). Использование этого компонента может значительно снизить объём трафика, потребляемого вашим сервером. Недостатком применения этого компонента является возрастание времени отклика из-за затрат на компрессию страницы.

Обычно мы предпочитаем иметь высокую скорость отклика, а не экономию трафика, но если вы предпочитаете обратно, просто активируйте этот компонент.

Компонент условного GET

Класс компонента: django.middleware.http.ConditionalGetMiddleware.

Компонент предоставляет поддержку условного GET. Если отклик содержит заголовки Last-Modified или ETag, а запрос содержит If-None-Match или If-Modified-Since, то отклик заменяется на 304 («Не изменён»). Поддержка ETag зависит от параметра USE_ETAGS и ожидает наличия заголовка ETag в отклике. Как упоминалось ранее, заголовок ETag устанавливается стандартным компонентом.

Данный компонент также удаляет содержимое любого отклика для запроса HEAD ??? FIXME ??? и устанавливает заголовки отклика Date и Content-Length для всех запросов.

Компонент поддержки обратного прокси

Класс компонента: django.middleware.http.SetRemoteAddrFromForwardedFor.

Этот компонент мы разобрали ранее в секции «Что такое компоненты?». Он устанавливает request.META['REMOTE_ADDR'], используя request.META['HTTP_X_FORWARDED_FOR'], если последний установлен. Это полезно, когда вы находитесь за обратным прокси, который преобразовывает параметр REMOTE_ADDR каждого запроса в 127.0.0.1.

Опасность!

Компонент не производит проверку HTTP_X_FORWARDED_FOR.

Если вы не находитесь за обратным прокси сервером, не используйте этот компонент.Любой может сфабриковать значение HTTP_X_FORWARDED_FOR и, соответственно, подменить свой IP адрес.

Используйте этот компонент только в том случае, когда вы абсолютно доверяете значениям в HTTP_X_FORWARDED_FOR.

Компонент поддержки сессий

Класс компонента: django.contrib.sessions.middleware.SessionMiddleware.

Этот компонент обеспечивает поддержку сессий. Подробности приведены в главе «Сессии, пользователи и регистрация».

Компонент для кэширования сайта

Класс компонента: django.middleware.cache.CacheMiddleware.

Этот компонент обеспечивает кэширование каждой страницы Django проекта. Подробности приведены в главе «Кэширование».

Компонент поддержки транзакций

Класс компонента: django.middleware.transaction.TransactionMiddleware.

Этот компонент «подключает» операции COMMIT или ROLLBACK к фазе запроса/отклика. Если функция представления отрабатывает успешно, то выполняется COMMIT. Если представление вызывает исключение, то выполняется ROLLBACK.

Место определения этого компонента в стеке компонентов имеет значение. Компоненты вызываемые до данного компонента выполняются по стратегии коммит-по-сохранению (стандартное поведение Django). Компоненты вызываемые после — будут включены в транзакцию в которой будет работать функция представления.

Обратитесь к приложению «Справочник по API взаимодействия с базой данных» для получения подробностей о транзакциях базы данных.

Компонент X-View

Класс компонента: django.middleware.doc.XViewMiddleware.

Этот компонент добавляет определённый HTTP заголовок X-View в запросы HEAD, которые идут от IP адресов, указанных в параметре INTERNAL_IPS. Компонент используется системой автоматического документирования Django.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID