假设我已经django.contrib.sessions.middleware.SessionMiddleware
安装在 django 中,并且正在使用SessionAuthentication
类进行 API 身份验证。在一个会话中,我通过我的 API 对模型进行了一些更改,之后我想回滚。我可以通过美味派来做到这一点吗?如果是,我应该执行什么方法?我在美味的文档中找不到这样的方法。你有任何工作的例子吗?
问问题
525 次
2 回答
2
Django 支持数据库事务,它将以原子方式提交多个状态更改。(文档...)
您的问题不清楚您想如何触发回滚。一种选择是使用request transactions,如果视图函数发出未处理的异常,它将回滚。如果您想要更细粒度的控制,请熟悉链接到文档中的选项。例如,您可以显式创建一个事务,然后将其回滚到您的视图中。
对于 Tastypie,您可能需要将事务管理放在Resource
接口上的适当方法中。
我希望这能给你一些指示。如有必要,请更新您的问题并提供更多详细信息。
于 2013-03-09T05:15:35.747 回答
0
因此,您想将对模型的更改提交到数据库,然后在将来的请求中回滚它们?这不是 TastyPie 支持的东西(或者,就此而言,Django 或 SQL)。考虑到其他请求可能同时与这些对象进行了交互/更改/建立了关系,因此实际上不可能像这样进行干净的回滚。
最好的解决方案可能是集成诸如Reversion之类的东西,它允许您将对象恢复到以前的状态。
如果您希望能够在会话期间回滚所有操作,您可能需要跟踪会话开始时间和已更改的对象列表。如果您想进行回滚,您只需要遍历该列表并调用reversion
的revert
方法,例如
reversion.get_for_date(your_model, session_start_datetime).revert()
但是,同样,这也将回滚任何其他用户在同一时间范围内所做的任何更改,但对于此要求的任何解决方案都是如此。
于 2013-03-06T03:49:59.747 回答