db更改时在Django中重新加载HTML表
Posted
技术标签:
【中文标题】db更改时在Django中重新加载HTML表【英文标题】:Reloading HTML table in Django when db changes 【发布时间】:2015-02-23 05:51:42 【问题描述】:简单地说,我有一个用 Django 模板实现的 html 表,它显示了我存储在数据库中的一些信息。我希望这个(html)表保持最新状态,并在数据库更改时自动更新。我环顾四周,但没有找到很多关于这个主题的文献。最好的方法是每隔一段时间进行一次 Ajax 调用来更新表吗?如果是这样,通话之间的标准时间量是多少?
非常感谢,如果需要更多信息,请告诉我。
【问题讨论】:
【参考方案1】:基本上您自己提出的解决方案称为长轮询。 Django 不能开箱即用,但有几个附加解决方案,即here。在客户端通过一些巧妙的 $.ajax 调用自己动手做起来并不难。
更彻底的解决方案不是直接使用长轮询,而是仅将其用作其他服务器端启动事件的后备,例如 WebSockets 和服务器发送事件 (SSE)。然而,这些更难实现,因为 WSGI 规范不提供这些。您必须拥有一个在 WSGI 之外处理此问题的网络服务器(想到 Tornado),或者拥有另一个网络服务器(可能是 node.js)或像 gevent 这样的事件处理程序来处理服务器通过 WebSockets/SSE 发送的消息。
Socket.io 提供从 WebSockets 到长轮询的后备方案,您需要像 this 这样的东西才能在 Django 端完成工作。
关于 socket.io、django 和 gevent 有一篇相当不错的博文here。
【讨论】:
非常感谢。你可能会说,我对网络开发并不感兴趣。这应该足以为我指明正确的方向。谢谢【参考方案2】:您可能应该使用 django 信号: https://docs.djangoproject.com/en/1.7/ref/signals/ 因此每次数据库更改时都可以更新模板。 例如,您可以使用每次调用 save() 方法时发送的 post_save 信号。 一种更简单的方法是以选定的速率刷新模板,尽管它没有经过优化。
【讨论】:
这不可能。服务器端信号如何导致浏览器中的页面刷新?以上是关于db更改时在Django中重新加载HTML表的主要内容,如果未能解决你的问题,请参考以下文章
Django - 在不重新启动开发服务器的情况下应用 HTML 和静态文件中的更改
Django:当本地 .py 文件更改并动态加载时,有没有办法防止开发服务器重新启动?