非常简单地说,我有一个用Django模板实现的html表,它显示了我存储在数据库中的一些信息。我希望这个(html)表保持最新状态,并在数据库发生变化时自动更新。我环顾四周,但没有找到关于这个主题的大量文献。这样做的最佳方法是经常进行Ajax调用以更新表吗?如果是这样,呼叫之间的标准时间是多少?
非常感谢,如果有更多需要的信息,请告诉我。
答案 0 :(得分:4)
基本上,您自己提出的解决方案称为长轮询。 Django不能开箱即用,但有几个附加解决方案,即here。在客户端使用一些聪明的$ .ajax调用自己鞭打它不会太难。
更彻底的解决方案不是直接使用长轮询,而是仅将其用作其他服务器端发起的事件(如WebSockets和服务器发送事件(SSE))的后备。然而,这些更难实现,因为WSGI规范不提供这些。您将不得不拥有一个在WSGI之外处理此问题的Web服务器(想到Tornado)或者有另一个Web服务器(可能是node.js)或者像gevent这样的事件处理程序来处理服务器通过WebSockets / SSE发送的消息。
Socket.io提供了从WebSockets到长轮询的回退,你需要像this这样的东西才能在Django端完成任务。
有一篇关于socket.io,django和gevent here的相当不错的博文。
答案 1 :(得分:-1)
您应该使用django信号: https://docs.djangoproject.com/en/1.7/ref/signals/ 因此,每次db更改时都可以更新模板。 您可以使用每次调用save()方法时发送的post_save信号。 一种更简单的方法是以选择的速率刷新模板,尽管它没有被优化。