【问题标题】:django-channels databinding on model.save()model.save() 上的 django-channels 数据绑定
【发布时间】:2017-06-22 17:54:42
【问题描述】:

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

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

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

谢谢,如果这含糊不清,请告诉我。

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

    相关的低级代码在channels/binding/base.pylines 121-187 中(至少在1.1.6 版本中)。这就是接收和处理信号的地方。它涉及一些不同的事情,例如跟踪将消息发送到哪些组。所以它有点复杂,但您可能可以通过查看该代码来梳理出如何做到这一点。

    涉及的步骤基本上是:

    • 为客户找到合适的组
    • 以与数据绑定代码相同的方式格式化您的消息(请参阅this section of the docs
    • 将消息发送到您在第 1 步中找到的所有相关组。

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多