如何在 django 中更新数据库后自动更新视图?

How to automatically update view once the database is updated in django?

我遇到了一个问题,我必须显示输入到数据库中的数据,而无需按任何按钮或执行任何操作。 我正在为医院创建一个应用程序,它有两种视图,一种用于医生,一种用于患者。 我希望一旦患者输入他的症状,它就会立即出现在医生身上,而无需按任何按钮。 我不知道该怎么做。 任何帮助,将不胜感激。 提前致谢

你不能单独使用 Django 来做到这一点。例如,您必须使用一些 JS 框架(React、Vue、Angular)和 WebSockets。

像 Django 这样的标准 Web 框架的工作方式是它需要一个请求输入并提供一个输出。

Request -> (Nginx/Gunicorn/...) -> Django -> Output -> (Html/JSON/XML)

请求是当您在浏览器中输入地址并按回车键时发生的,或者当您发送 Ajax 请求时(同样的事情,但不按回车键并刷新页面)。

Django 没有办法单独做这样的事情:

(An event on your server) -> Django -> your browser

Django 不知道您的浏览器在哪里。你的浏览器知道他在哪里,但反过来不知道。

过去,我们通过在JavaScript中设置一个定时器来解决这个问题,每n秒刷新一次页面。

setTimeout(function(){
   window.location.reload(1);
}, 5000);

如今,更好的解决方案是使用 websockets。在客户端,它们看起来像这样:

let mySocket = new WebSocket("ws://www.example.com/socketserver");

mySocket.onmessage = function (event) {
  console.log(event.data);
}

这假设在 "ws://www.example.com/socketserver" 中,您正在为一个网络套接字提供服务,该服务器会向所有监听的客户端发送消息,只要您告诉它。

Django 不能为你做这个:它需要第一种交互,而且只有第一种。

通常推荐用于 Web 套接字的服务器端软件是 Celery。

在这里阅读:https://celery.readthedocs.io/en/latest/getting-started/introduction.html

这可能代表您的应用程序相当复杂。

另一个选择是 NodeJS,一个 100% 异步的运行时环境。