2017-06-22 4 views
0

私はデータバインディングを使用しているチャンネルアプリを持っています。 djangoの管理者が変更を加えると、期待通りにウェブにプッシュされています。私はgpioユニットでいくつかの長いポーリングを行い、dbを更新するためにソケット接続でループを設定しましたが、これらの変更はWebにプッシュされません。シグナルはアウトバウンドバインディングに使用されるので、Django以外のモデルの値を変更した場合(またはQuerySetで.update()メソッドを使用する場合)、シグナルはトリガーされず、変更は発送されません。自分で変更をトリガーできますが、システムの適切な場所からイベントを取得する必要があります。django-channels model.save()上のデータバインディング

アドミニストレーターと同じように、これらの変更を引き起こすにはどうすればよいですか?

ありがとうございます。これが曖昧な場合はお知らせください。

答えて

0

lines 121-187channels/binding/base.py(少なくともバージョン1.1.6以上)です。信号が受信されて処理される場所です。これには、メッセージを送信するグループを追跡するなど、いくつかの異なることが含まれます。だから少し複雑ですが、おそらくそのコードを見て、どうやってそれを行うかを試してみることができます。関与

の手順は、基本的には、以下のとおりです。

  • は、クライアント
  • フォーマットデータバインディングコードがすべてにメッセージを送る
  • this section of the docsを参照)であろうと同じように、あなたのメッセージのための右のグループを探しますあなたがステップ1で見つけた関連グループ。

また、ソケットコードがPOSTにAPIを送信するようにREST APIを使用することも考えられます(whi chはデータベースレコードを直接作成するのではなく、通常の方法でORM経由でデータベースレコードを作成します)。その場合、信号は自動的に発生します。 djangorestframework(サーバー側)とrequests(長いポーリングコードでPythonを使用している場合はクライアント側)は、あなたがそのようにしたいと思うなら、あなたの友人です。ロング・ポーリング・クライアントに別の言語を使用している場合は、REST APIクライアント作業に相当する多くのパッケージがあります。

幸運を祈る!

関連する問題