Контекстные процессоры против промежуточного программного обеспечения в Django
Мне кажется, что все, что может сделать контекстный процессор, может сделать промежуточное программное обеспечение. Так в чем смысл контекстных процессоров? Они просто middleware-lite?
3 ответа
Промежуточное программное обеспечение действует как низкоуровневая обработка запросов / ответов в Django, и оно легкое. Хуки доступны для запроса, ответа, просмотра, template_response и обработки исключений. Хук может потребоваться изменить запрос до того, как представление его обработает, может потребоваться записать информацию о запросе в целях отладки, проверить куки-файл для установки локального и т. Д.
Читайте больше на Middleware.
Контекстные процессоры просто изменяют контекст. Контекст - это отображение значения ключа с переменными, передаваемыми в шаблон. Обработчик контекста принимает в качестве аргумента объект запроса и возвращает словарь элементов, которые объединяются в контекст. Контекст визуализируется в вашем шаблоне в соответствии с вашим представлением, и он присоединяет все остальное, к чему присоединяются ваши обработчики контекста. Вы можете думать о нем как о глобальной переменной (ях) контекста, доступной вам во всех ваших шаблонах.
Читайте больше на процессорах контекста.
Оба довольно просты в написании и имеют свое предназначение. Вот диаграмма, которая показывает, где промежуточное ПО и контекст вписываются в типичный поток django:
Блок-схема Джанго
Пользователь запрашивает страницу
Запрос достигает запроса Middlewares, который может манипулировать или ответить на запрос
URLC связывает связанный вид с помощью urls.py
View Middlewares вызываются, которые могут манипулировать или отвечать на запрос
Функция просмотра вызывается
Представление может дополнительно получить доступ к данным через модели
Все взаимодействия модели с БД осуществляются через менеджера
Представления могут использовать специальный контекст, если это необходимо
Контекст передается в шаблон для рендеринга.
Контекстные процессоры используются для предоставления шаблонам дополнительных данных. Промежуточное программное обеспечение предназначено для перехвата объектов запроса / ответа и изменения их (или запуска другого поведения) каким-либо значимым образом.
Они работают на разных уровнях стека для разных контекстов. Обычно сложно поддерживать стеки фреймворка в строгом смысле слова, особенно веб-фреймворк, такой как обработка Django, - это запрос и ответ. Да, мы можем использовать request.user вместо context.user при помощи context_processor при рендеринге шаблона. Но вы можете не захотеть, чтобы атрибуты, которые используются только в шаблоне, устанавливались при каждом запросе.
Кроме того, декоратор является более гибким, чем промежуточное программное обеспечение, для работы на уровне представления, но сложно сказать, что промежуточное программное обеспечение является облегченным для декоратора. Я хотел бы рассматривать процессоры контекста как теги шаблона назначения, но, между прочим, загружается автоматически.