Контекстные процессоры против промежуточного программного обеспечения в Django

Мне кажется, что все, что может сделать контекстный процессор, может сделать промежуточное программное обеспечение. Так в чем смысл контекстных процессоров? Они просто middleware-lite?

3 ответа

Промежуточное программное обеспечение действует как низкоуровневая обработка запросов / ответов в Django, и оно легкое. Хуки доступны для запроса, ответа, просмотра, template_response и обработки исключений. Хук может потребоваться изменить запрос до того, как представление его обработает, может потребоваться записать информацию о запросе в целях отладки, проверить куки-файл для установки локального и т. Д.

Читайте больше на Middleware.

Контекстные процессоры просто изменяют контекст. Контекст - это отображение значения ключа с переменными, передаваемыми в шаблон. Обработчик контекста принимает в качестве аргумента объект запроса и возвращает словарь элементов, которые объединяются в контекст. Контекст визуализируется в вашем шаблоне в соответствии с вашим представлением, и он присоединяет все остальное, к чему присоединяются ваши обработчики контекста. Вы можете думать о нем как о глобальной переменной (ях) контекста, доступной вам во всех ваших шаблонах.

Читайте больше на процессорах контекста.

Оба довольно просты в написании и имеют свое предназначение. Вот диаграмма, которая показывает, где промежуточное ПО и контекст вписываются в типичный поток django:

Блок-схема Джанго

  1. Пользователь запрашивает страницу

  2. Запрос достигает запроса Middlewares, который может манипулировать или ответить на запрос

  3. URLC связывает связанный вид с помощью urls.py

  4. View Middlewares вызываются, которые могут манипулировать или отвечать на запрос

  5. Функция просмотра вызывается

  6. Представление может дополнительно получить доступ к данным через модели

  7. Все взаимодействия модели с БД осуществляются через менеджера

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

  9. Контекст передается в шаблон для рендеринга.

Контекстные процессоры используются для предоставления шаблонам дополнительных данных. Промежуточное программное обеспечение предназначено для перехвата объектов запроса / ответа и изменения их (или запуска другого поведения) каким-либо значимым образом.

Они работают на разных уровнях стека для разных контекстов. Обычно сложно поддерживать стеки фреймворка в строгом смысле слова, особенно веб-фреймворк, такой как обработка Django, - это запрос и ответ. Да, мы можем использовать request.user вместо context.user при помощи context_processor при рендеринге шаблона. Но вы можете не захотеть, чтобы атрибуты, которые используются только в шаблоне, устанавливались при каждом запросе.

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

Другие вопросы по тегам