1

关于中间件的顺序,这个问题指出:

SessionMiddleware

  • 之前TransactionMiddleware:我们这里不需要交易

为什么我不想在我的事务中更新会话?如果会话被更新为视图中发生的某些事情的副作用并且视图失败,我无法想象我希望会话仍然更新的情况,就好像它没有失败一样。(显然,如果会话引擎不是基于数据库的,则必须以其他方式解决此问题。)

请提供一个明确的用例,为什么我可能希望SessionMiddlewareTransactionMiddleware.

4

1 回答 1

3

会话中间件由消息中间件使用。我们通常喜欢从事务中排除消息中间件。

消息中间件页面

如果您使用依赖于会话(默认)的存储后端,则必须启用“django.contrib.sessions.middleware.SessionMiddleware”并出现在 MIDDLEWARE_CLASSES 中的 MessageMiddleware 之前。

由于我们可能希望将事务失败显示为用户消息,因此我们将消息中间件排除在事务之外。

同样在长时间运行的进程中,我通常使用 Messages/Session 来不断更新进程状态。通过 Ajax 调用检索相同的内容。如果 Message 或 Session MW 放在 Transactions 之后,则状态更新不会响应。

于 2012-03-12T17:55:11.887 回答