在我看来,中间件可以完成上下文处理器所能做的一切。那么上下文处理器的重点是什么?他们只是中间件 - 精简版?上下文处理器vs django中的中间件
回答
上下文处理器用于为模板提供额外的数据。中间件用于拦截请求/响应对象,并以某种有意义的方式修改它们(或触发其他行为)。
他们在不同的上下文中工作在不同的堆栈级别。它通常很难将框架堆栈保持为绝对正统,特别是像Django处理这样的Web框架是请求和响应。是的,我们可以在呈现模板时使用request.user,而不是context_processor使用context.user。但是您可能不希望仅在模板中使用的属性在每个请求中都设置。
此外,装饰器比视图级操作的中间件灵活,但很难说中间件是装饰者精简版。顺便说一下,我希望将上下文处理器作为分配模板标签对待,但会自动加载。
中间件充当Django的低级别请求/响应处理钩子,它很轻松。这些钩子可用于请求,响应,视图,template_response和异常处理。挂钩可能需要在视图处理它之前修改请求,它可能需要记录有关请求的信息以进行调试,检查cookie以设置本地等等。
了解更多关于Middleware。
上下文处理器只是修改上下文。上下文是将变量传递给模板的关键值映射。上下文处理器将请求对象作为参数,并返回合并到上下文中的项目的字典。上下文会根据您的视图呈现给您的模板,并且它会附加您的上下文处理器合并的任何其他内容。您可以将其视为全局上下文变量,在您的所有模板中均可使用。
了解更多关于Context Processors。
两者都相当简单的写和有其目的。下面是示出了其中中间件和上下文适应在典型的django流程的图:
Django的流程图
用户请求一个页面
请求到达请求中间件,它可以操纵或回答请求
URLConffinds rela特德使用网址查看。PY
查看中间件被调用,它可以操纵或回答请求
视图功能是通过模型
所有模型来调用
视图可以选择性地访问数据-DB交互是通过管理器完成的
如果需要,视图可以使用特殊的上下文
将上下文传递给用于呈现的模板
- 1. Django的上下文处理器和中间件
- 2. Django上下文处理器
- 3. django-cms中的插件上下文处理器
- 4. Django站点的上下文处理器
- 5. Django上下文处理器故障
- 6. Django上下文处理器获取AnonymousUser
- 7. Django,模板上下文处理器
- 8. Django 1.5中的模板上下文处理器在哪里?
- 9. Django中的线程安全模板上下文处理器?
- 10. 在Grails中是否有Django的上下文处理器?
- 11. 在上下文处理器中的关系“向后”处理器
- 12. Django上下文处理器没有Django的其余部分?
- 13. 在Django中处理文件
- 14. Django:在文件上传中处理浏览器的BACK按钮
- 15. __init__ vs __enter__在上下文管理器
- 16. 使用Django上下文处理器或中间件来检查模板上的Cookie?
- 17. Django的时候查询集传递到上下文处理器
- 18. Django的上下文处理器以检查用户权限
- 19. 使用Django处理上传的文件
- 20. django admin上传的文件处理
- 21. Bazel:处理ctx.action中的中间文件
- 22. 何时适合使用Django上下文处理器?
- 23. Django上下文处理器和表单变量
- 24. Django:模板上下文处理器请求变量
- 25. 如何从Django应用程序添加上下文处理器
- 26. Django与Jinja2 - 使用自定义上下文处理器
- 27. Django模板变量,RequestContext和上下文处理器
- 28. Django上下文处理器和URL参数
- 29. Django上下文处理器:是否可以访问ContextProcessor中的当前上下文?
- 30. golang http处理器上下文