Хостинг Django от «Джино»
Table of contents

Методы

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

Конструктор

Используйте __init__(self) для регистрации класса компонента в системе.

В целях повышения производительности класс каждого активированного компонента инициализируется только один раз для серверного процесса. Это означает, что __init__(self) вызывается только один раз, при запуске сервера.

Стандартной причиной для реализации метода __init__(self) является проверка действительно ли нужен данный компонент. Если __init__(self) вызывает исключение django.core.exceptions.MiddlewareNotUsed, тогда Django удаляет компонент из стека компонентов. Вы можете использовать эту особенность для проверки некоторой части программного обеспечения, которое необходимо для работы компонента, для проверки работает ли сервер в режиме отладки или для других подобных ситуаций.

Если для компонента определён метод __init__(self), то данный метод не должен принимать никаких дополнительных аргументов, кроме self.

Препроцессор запроса

Этот метод вызывается при получении запроса — перед тем как Django приступает к обработке URL для определения функции представления, которую требуется запустить. Метод получает объект HttpRequest и может изменять его.

Метод process_request() должен возвращать или None или объект HttpResponse:

  • Если метод возвратил None, Django продолжает обработку этого запроса, используя для этого другие компоненты, а затем и соответствующее представление.

  • Если метод возвратил объект HttpResponse, Django не будет вызывать другие компоненты и соответствующее представление, а просто вернёт этот объект.

Препроцессор представления

Этот метод вызывается после препроцессора запроса и после того как Django определил какое именно представление следует использовать для обработки этого запроса, но прежде чем это представление будет использовано.

Аргументы, передаваемые в это представление, показаны в таблице « Аргументы передаваемые в process_view() ».

Таблица 15.1. Аргументы передаваемые в process_view()

АргументКомментарий
requestОбъект HttpRequest
viewПредставление, которое используется Django для обработки данного запроса. Это функциональный объект, а не просто имя функции, представленное в виде строки.
argsСписок неименованных аргументов, который будет передан в представление, без аргумента request (который всегда является первым аргументом представления).
kwargsСловарь именованных аргументов, который будет передан в представление.


Подобно методу process_request(), данный метод должен возвращать либо None, либо объект HttpResponse.

  • Если возвращается None, Django продолжает обработку данного запроса, используя остальные компоненты, а затем и соответствующее представление.

  • Если возвращается объект HttpResponse, Django не будет вызывать другие компоненты и соответствующее представление. Django немедленно вернёт полученный объект.

Постпроцессор отклика

Этот метод вызывается после вызова функции представления и генерации отклика. В этом месте, постпроцессор может модифицировать содержимое отклика. Один очевидный случай применения — компрессия контента, т.е., применение утилиты gzip над отдаваемым HTML.

Назначение параметров должно быть понятно из их названия: request — объект запроса, response — объект отклика, возвращённый из представления.

В отличие от препроцессоров запроса и представления, которые могут возвращать None, постпроцессор process_response() должен возвращать объект HttpResponse. Этот отклик может быть оригинальным, т.е. тем, который был передан в метод (возможно, изменённый) или совершенно новым.

Постпроцессор исключения

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

Параметры метода: request — объект, с которым мы работаем, а exception — объект Exception, созданный функцией представления.

Метод process_exception() должен возвращать либо None, либо HttpResponse.

  • Если возвращается None, Django продолжает обработку данного исключения встроенным механизмом.

  • Если возвращается объект HttpResponse, Django будет использовать этот отклик вместо того, который отдал встроенный механизм обработки исключений.

Замечание

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

Вы также можете найти ряд примеров предоставленных сообществом Django на wiki: http://code.djangoproject.com/wiki/ContributedMiddleware.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

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

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5