我有一个带有Django通道的WebSocket,一旦消费者连接上,我就会尝试向他们发送数据。
consumers.py:
class CameraOnlineConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
logger.info(f"Added {self.channel_name} channel to workflow")
query_set = await self.get_events()
print(query_set)
minute_delta = timedelta(seconds=60)
difference = query_set[0].time_stamp - query_set[1].time_stamp
if difference <= minute_delta:
return self.send(text_data=CameraOnline.status_code)
else:
return self.send(text_data=CameraOffline.status_code)
@database_sync_to_async
async def get_events(self):
return PastureEvent.objects.filter(result=7).order_by('-time_stamp')[:2]启动client WebSocket时:
ws = new WebSocket("ws://127.0.0.1:8000/ws/camera_online/connect/")我在终端中打印出以下错误:
difference = query_set[0].time_stamp - query_set[1].time_stamp
TypeError: 'coroutine' object is not subscriptable
WebSocket DISCONNECT /ws/camera_online/connect/ [127.0.0.1:43014]发布于 2020-08-06 20:23:30
我一直在使用错误的类,因为我只用ORM来获取两个对象(不是繁重的操作),我应该使用通道通用模块中的WebsocketConsumer。
class CameraOnlineConsumer(WebsocketConsumer):
def connect(self):
self.accept()
logger.info(f"Added {self.channel_name} channel to workflow")
query_set = self.get_events()
minute_delta = timedelta(seconds=60)
difference = query_set[0].time_stamp - query_set[1].time_stamp
if difference <= minute_delta:
return self.send(text_data=CameraOnline.default_code)
else:
return self.send(text_data=CameraOffline.default_code)
def get_events(self):
return PastureEvent.objects.filter(result=7, farm_id='1').order_by('-time_stamp')[:2]https://stackoverflow.com/questions/63279849
复制相似问题