在数据库更改时向用户发送通知

时间:2011-04-02 04:50:14

标签: jquery ajax django notifications

我正在建立一个自助餐厅管理系统,其中有两种类型的用户; customres&柜台所有者。

对于自助餐厅提供的每道菜,都有与之相关的独特菜肴。

直到现在,我还有像学生一样发送一个POST请求,其中包含了dish,id和counter number到一个更新“orders table”(其中PK为id)的URL。当菜肴准备好后,柜台所有者按“Prepeared”按钮。

此时,我希望订单紧挨着准备好的客户收到“您的订单准备工作正在进行中”。

我该怎么办? 一种方法是简单地创建一个视图,其参数为customer.id&状态,它回复True或Flase。如果我收到True,我可以简单地轮询URL并提供通知。

但是,我觉得轮询不是一个更好的方法,因为会有这么多客户登录,每个人都会轮询到不可加入的服务器。 有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

这真的取决于你真正需要的东西。

如果通知可以作为用户活动的一部分发送,只需添加用户消息,只要用户在页面上执行操作,就会显示该消息。 django.contrib.messages加上主html模板中的几行就可以了。

但是如果您希望通知是互动的 - 您可以使用few PUSH options

之一

有趣的链接:

从服务器端,可用的选项很少,最简单的是Green Unicorn。使用它将允许您通过少量进程打开和管理数千个连接。

答案 1 :(得分:1)

我不知道你是否理解正确,但我认为你应该使用websockets

 http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/ 

答案 2 :(得分:0)

没有重复轮询的“推送”的最简单方法是“long polling”,其中客户端启动请求并在可用时立即获得答案。无论如何你必须使用一个良好的缩放服务器,但它不会受到至少一直受到重创。

有更好但更复杂的服务器推送方式,请查看我上面链接的文章。

答案 3 :(得分:0)

有两种可能的方法......

  1. 覆盖您的相关型号admin.py 保存方法,例如it described in here

  2. 您可以使用信号as it described in here

  3. 使用admin.save_model更容易,更符合您的需求。由于您有table_id,因此您可以将表的订单状态设置为“准备”。

答案 4 :(得分:-1)

由于我们无法通过http推送数据,我认为轮询是唯一的选择。

您可以使用ajax请求进行轮询,这可以用来更新其他一些统计信息(如果有的话)以使其更具交互性:)