Подтвердить что ты не робот

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

Мне кажется, что все, что может сделать процессор контекста, может выполнять промежуточное ПО. Итак, какова точка контекстных процессоров? Являются ли они просто middleware-lite?

4b9b3361

Ответ 1

Middleware действует как крючок в обработке запросов/ответа Django на низком уровне и является легким. Крючки доступны для запроса, ответа, просмотра, шаблона_репортажа и обработки исключений. Крюку может потребоваться изменить запрос до того, как его обработает, ему может потребоваться зарегистрировать информацию о запросе для целей отладки, проверить файл cookie, чтобы установить локальный, и так далее.

Подробнее о Middleware.

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

Подробнее о Контекстные процессоры.

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

enter image description here

Блок-схема Django

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

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

  • URLConffinds связан с View, используя urls.py

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

  • Вызывается функция просмотра

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

  • Все взаимодействия между моделью и БД выполняются с помощью диспетчера

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

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

Ответ 2

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

Ответ 3

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

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