上下文处理器与django中的中间件

gar*_*ois 19 django django-templates django-middleware django-context

在我看来,上下文处理器可以做的一切,中间件都可以做到.那么上下文处理器的意义何在?它们只是中间件 - 精简版吗?

rad*_*tek 23

中间件充当了Django在低级别的请求/响应处理的钩子,并且很轻.钩子可用于请求,响应,视图,模板响应和异常处理.挂钩可能需要在视图处理之前修改请求,它可能需要记录有关请求的信息以进行调试,检查cookie以设置本地,等等.

了解更多关于中间件.

上下文处理器只是修改上下文.Context是传递给模板的变量的键值映射.上下文处理器将请求对象作为其参数,并返回合并到上下文中的项的字典.根据您的视图将上下文呈现给您的模板,并附加上下文处理器合并的任何其他内容.您可以将其视为全局上下文变量,可在所有模板中使用.

阅读有关Context Processors的更多信息.

两者都很容易编写并有其目的.下面的图表显示了典型django流中的中间件和上下文的位置:

在此输入图像描述

Django流程图

  1. 用户请求页面

  2. 请求到达请求中间件,可以操纵或回答请求

  3. URLC使用urls.py来管理相关的View

  4. 查看中间件,可以操作或回答请求

  5. 调用视图函数

  6. 视图可以选择通过模型访问数据

  7. 所有模型到数据库的交互都是通过管理器完成的

  8. 如果需要,视图可以使用特殊上下文

  9. 上下文传递给Template进行渲染


Jos*_*ton 16

上下文处理器用于为模板提供额外数据.中间件用于拦截请求/响应对象,并以某种有意义的方式修改它们(或触发其他行为).