2017-06-22 43 views
0

我有一個使用數據綁定的頻道應用程序。當用django管理員進行更改時,他們會按預期推送到網絡上。我在套接字連接上建立了循環,在gpio單元上進行一些長輪詢並更新數據庫,這些更改不會被推送到網絡上。通道文檔中提到:django-channels databinding on model.save()

信號用於爲出站綁定供電,因此如果您在Django之外更改模型的值(或者在QuerySet上使用.update()方法),則不會觸發信號,並且更改將不會被髮送出去。您可以自己觸發更改,但您需要從系統的正確位置獲取事件。

如何處理觸發這些更改,就像管理員發生的那樣?

謝謝,請讓我知道如果這是模糊的。

回答

0

相關的低級代碼位於lines 121-187channels/binding/base.py(至少在版本1.1.6中)。這就是信號接收和處理的地方。它涉及一些不同的事情,例如跟蹤哪些組發送消息。所以這有點牽扯,但你可以梳理出如何去做,看看這些代碼。

涉及的步驟基本上是:

  • 找到合適的團體客戶端
  • 格式化以同樣的方式的信息,即數據綁定代碼會(見this section of the docs
  • 將消息發送到所有您在步驟1中找到的相關組。

或者,您可以考慮使用REST API,以便套接字代碼向API提交POST(whi ch會以正常的方式通過ORM創建數據庫記錄)而不是直接創建數據庫記錄。在這種情況下,你的信號會自動發生。如果你想要這樣做的話,djangorestframework(服務器端)和requests(客戶端,如果你使用python作爲長輪詢代碼)是你的朋友。如果您爲長輪詢客戶端使用其他語言,則有許多用於REST API客戶端工作的等效包。

祝你好運!