После того как вы узнали, что такое компоненты и как их устанавливать, давайте рассмотрим все доступные методы, которые могут определяться в классах компонентов.
Используйте __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.
| Пред. | Уровень выше | След. |
| Установка | Начало | Встроенные компоненты |
0 comments | Make a comment