在model.save()上的django-channels数据绑定

时间:2017-06-22 17:54:42

标签: django django-channels

我有一个使用数据绑定的频道应用。当使用django admin进行更改时,它们将按预期推送到Web。我在套接字连接上设置循环以在gpio单元上进行一些长轮询并更新数据库,这些更改不会被推送到Web。频道文件说:

信号用于为出站绑定提供动力,因此如果您更改Django之外的模型的值(或在QuerySet上使用.update()方法),则不会触发信号并且不会发送更改。您可以自己触发更改,但是您需要从适合您系统的地方获取事件。

如何触发这些更改,就像管理员一样?

谢谢,如果这是模糊的,请告诉我。

1 个答案:

答案 0 :(得分:0)

相关的低级代码位于channels/binding/base.py的{​​{3}}内(至少在版本1.1.6中)。那是接收和处理信号的地方。它涉及一些不同的事情,例如跟踪发送消息的组。所以它有点牵扯,但你可以在看代码的时候弄清楚如何去做。

所涉及的步骤基本上是:

  • 为客户找到合适的群组
  • 以与数据绑定代码相同的方式格式化您的消息(请参阅lines 121-187
  • 将消息发送给您在步骤1中找到的所有相关群组。

或者,您可以考虑使用REST API,使套接字代码向API提交POST(这将通过ORM以正常方式创建数据库记录),而不是直接创建数据库记录。在这种情况下,您的信号将自动发生。 djangorestframework(服务器端)和requests(客户端,如果您使用python进行长轮询代码)是您的朋友,如果您想要这样做,当然。如果您为长轮询客户端使用其他语言,则有许多等效的REST API客户端工作包。

祝你好运!