Django阻止请求

时间:2012-10-05 13:18:55

标签: django

我的网站有问题。那是:

在这种情况下没问题:

  • 用户A执行请求。
  • Django服务器更新数据......
  • 对象1已更新。
  • 对象2已更新。
  • 对象3已更新。
  • Django渲染结果。
  • 用户A请求。

在这种情况下出现问题:

  • 用户A请求。
  • Django服务器更新数据......
  • 对象1已更新。
  • 对象2已更新。
  • 用户A执行其他请求!
  • 用户A执行其他请求!
  • Django渲染结果。

问题是,如果用户在服务器尚未完成工作时发出请求,服务器将停止该过程并且数据不再良好。

我认为我必须阻止客户端(通过显示例子的加载消息)但我想成为用户 cant 在服务器上发出请求,如果另一个treatemment仍在工作。

谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

这听起来像是一个漫长的过程,用户厌倦了等待,点击浏览器中的“停止”;另一种情况是 - 用户打开另一个选项卡并再次发送相同的请求。

解决此问题的几种方法。

  1. 如果请求被中断,请使用transaction middleware来防止数据库对象被破坏。

  2. 使用celery之类的任务队列。在第一次请求时,将您的任务卸载到队列/代理。向用户发送一条消息,表明他们的请求已被接受处理。现在用户可以自由发送重复请求。如果是,您可以检查队列的状态,并拒绝重复的请求。