如何解决Django,将通道Websocket与信号连接
我有一个Channels Web套接字,我试图添加另一个应用程序的信号,因此当创建事件时,WebSocket会根据其逻辑发送一条消息。 当我第一次连接WebSocket时,该功能可以正常运行,当我添加发送者模型的新对象时,会出现错误。
消费者:
class CameraOnlineConsumer(JsonWebsocketConsumer):
def connect(self):
self.accept()
return self.send(json.dumps({"type": "websocket.accept","send": "Connected Successfully"})),self.camera()
def camera(self):
result = self.check_events()
print("new event")
return self.send(json.dumps({
"type": "websocket.send","send": result
}))
def get_events(self):
return PastureEvent.objects.filter(result=8,farm_id='1',processed=False).order_by('-time_stamp')[:2]
def check_events(self):
minute_delta = timedelta(seconds=60)
query_set = self.get_events()
if not query_set:
result = {'camera status': CameraOffline.default_detail,}
return result
elif len(query_set) == 1: # means that no new events has been recorded since last check.
result = {'camera status': CameraOnline.default_detail,'first time_stamp': str(query_set[0].time_stamp)}
return result
elif len(query_set) >= 2: # two relevant events received.
difference = query_set[0].time_stamp - query_set[1].time_stamp
if difference <= minute_delta:
if query_set[1]:
# query_set[1].processed = True & query_set[1].save() didn't work,why?
PastureEvent.objects.select_for_update().filter(id=query_set[1].id).update(processed=True)
else:
pass
# time difference between them is under/equal to the desired time difference between events.
result = {'camera status': CameraOnline.default_detail,'first time_stamp': str(query_set[0].time_stamp),'last time_stamp': str(query_set[1].time_stamp)}
return result
else:
if query_set[1]:
PastureEvent.objects.select_for_update().filter(id=query_set[1].id).update(processed=True)
else:
pass
# two events exist but the difference between them is bigger then one minute,if changed in the next
# check it would be updated to camera online.
result = {'camera status': CameraOnline.default_detail,'first time_stamp': str(query_set[0].time_stamp)}
return result
else:
# For Now,every other case should result in a camera offline msg as well.
return {'camera status': CameraOffline.default_detail}
apps.py中我的信号定义:
class AgsenzeApiConfig(AppConfig):
name = 'agsenze_api'
def ready(self):
from agsenze_api.models import PastureEvent
from farm_api.consumers import CameraOnlineConsumer
post_save.connect(CameraOnlineConsumer.camera,sender=PastureEvent)
创建新对象时:
(receiver,receiver(signal=self,sender=sender,**named))
TypeError: camera() got an unexpected keyword argument 'signal'
HTTP POST /agsenze_admin/agsenze_api/pastureevent/add/ 500 [0.04,127.0.0.1:36304]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。