如何在Django通道rest框架中订阅模型?

2024-06-16 09:53:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Django通道Rest框架订阅模型中的更改。我一直在https://djangochannelsrestframework.readthedocs.io/en/latest/examples/model_observer.html遵循这个例子,最新的问题是:How to subscribe to all instances of a model in django channels rest framework?。但是,当模型更新时,我不会通过WebSocket接收更新

我将consumser设置如下:

# consumers.py

from djangochannelsrestframework.consumers import AsyncAPIConsumer
from djangochannelsrestframework.observer import model_observer
from .models import User, Comment


class ModelConsumerObserver(AsyncAPIConsumer):
    async def accept(self, **kwargs):
        print("WebSocket Connect 1")
        await super().accept()
        print("WebSocket Connect 2")
        await self.model_change.subscribe()
        print("WebSocket Connect 3")

    @model_observer(Comment)
    async def model_change(self, message, **kwargs):
        print("Model Observer 1")
        await self.send_json(message)
        print("Model Observer 2")

我试图订阅注释模型,如文档中的示例所示。然而,我没有收到模型的更新。在我这边,目前没有身份验证,服务器上也没有异常。本地服务器控制台显示:

System check identified no issues (0 silenced).
June 06, 2021 - 10:11:10
Django version 3.2.3, using settings 'websocket.settings'
Starting ASGI/Channels version 3.0.3 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
HTTP GET / 200 [0.01, 127.0.0.1:64527]
WebSocket HANDSHAKING /ws/my-consumer/ [127.0.0.1:64528]
WebSocket Connect 1
WebSocket CONNECT /ws/my-consumer/ [127.0.0.1:64528]
WebSocket Connect 2
WebSocket Connect 3

我不确定,但它似乎永远不会到达模型观察者。有什么想法吗


Tags: todjangofrom模型importselfmodelconnect