关于中间件的顺序,this question表示:
SessionMiddleware
- 在
TransactionMiddleware
之前:我们不需要此处的交易
为什么我不想在我的交易中更新会话?如果会话更新为视图中出现的某些副作用并且视图失败,我无法想象我希望会话仍然更新,就好像它没有失败一样。 (显然,如果会话引擎不是基于数据库的,则必须以其他方式解决此问题。)
请提供一个明确的用例,说明为什么我可能希望SessionMiddleware
在TransactionMiddleware
之外运行。
答案 0 :(得分:3)
会话中间件由Message Middleware使用。我们通常希望从交易中排除消息中间件。
如果您使用的是依赖会话的存储后端(默认),则必须启用“django.contrib.sessions.middleware.SessionMiddleware”并在MIDDLEWARE_CLASSES中的MessageMiddleware之前显示。
由于我们可能希望将事务失败显示为用户消息,因此我们会从事务中排除消息中间件。
同样在长时间运行的进程中,我通常使用Messages / Session来不断更新进程状态。通过Ajax调用检索相同的内容。如果在事务之后放置消息或会话MW,则状态更新将不响应。