【问题标题】:Cant send the data from the database to the client in real time without refreshing - DJANGO CHANNELS无法在不刷新的情况下将数据从数据库实时发送到客户端 - DJANGO CHANNELS
【发布时间】:2022-01-12 05:38:18
【问题描述】:

我尝试了这种方法stackoverflow,但没有奏效

consumer.py

import json
import asyncio
from channels.consumer import AsyncConsumer
from django.contrib.auth import get_user_model
from channels.db import database_sync_to_async
from .models import Analytics

class AnalyticsConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print('connected', event)
        await self.send({
            'type': 'websocket.accept'
        })
        analytics_obj = await self.getAnalytics()
        await self.send({
            'type': 'websocket.send',
            'text': str(analytics_obj)
        })

    async def websocket_receive(self, event):
        print('receive', event)


    async def websocket_disconnect(self, event):
        print('disconnected', event)

    @database_sync_to_async
    def getAnalytics(self):
        return list(Analytics.objects.all().values())[0]['number']

控制台显示消息 == analytics_obj 但是当我在数据库中进行更改时,它不会反映在控制台消息中。为此,我需要刷新浏览器。使用 WebSocket 时刷新浏览器有什么意义。

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

    只需更新数据库中的值,就不会向前端发送新消息。更新数据库后,您需要通过 django 频道发送“更新”消息。到目前为止,您发送分析数据的唯一时间是连接到服务器时。

    【讨论】:

    • 那么你是说我应该定义另一个异步函数,比如async def updatedData(self, event) ??
    • 是的,该功能需要广播您的更新数据。在此处查看有关如何从消费者外部访问渠道的更多信息:stackoverflow.com/questions/53461830/…
    • 好的,谢谢。您的回答为我提供了足够的信息来构建一个函数,以便在从消费者类外部接收到消息时将消息发送给客户端。我安装了websockets-client 并在views.py 中通过websockets-client 库发送了需要在网页上显示的信息。但我不能在views.py 中使用django-channels。为此,我将遵循您的另一个建议,访问消费者之外的渠道。
    猜你喜欢
    • 2015-12-18
    • 2018-12-16
    • 1970-01-01
    • 2014-10-11
    • 2021-11-03
    • 2020-03-18
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多