将object id参数移动到consumers.py Django Channels



我有个问题。重点是,我正在使用Django后端和React前端制作应用程序。我想制作一个可以在实时聊天室中写作的网络套接字。问题是,我不知道如何动态加载房间id。我会尽力解释。重点是,来自ChatConsumer类的connect方法将加载重新分配到房间的消息,并通过json将其发送到前端。

这就是它的样子。

class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_group_name = 'test'
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
messages = Message.objects.filter(room=[HERE I NEED TO PUT ID OF ROOM])
data_ready_for_json =list( messages.values('room','body','user'))
self.accept()
self.send(text_data=json.dumps({
'type':'chat',
'message': data_ready_for_json
}))

我正试图从我的视图发送这个id,在那里我有由泛型构建的RoomRetrieveView。RetrieveAPIView。这是:

class RoomRetrieveView(generics.RetrieveAPIView):
queryset = Room.objects.all()
permission_classes = (AllowAny,)
serializer_class = RoomSerializer

def get_serializer_context(self):
context = super(RoomRetrieveView,self).get_serializer_context()
context.update({'id' : self.get_object().id})
roomId = context['id']
return roomId

我试图将这个roomId变量从get_serializer_context移到我的consumers.py文件中;自我;属性,但我不知道如何弄清楚。我也尝试使用get_object方法,但它也不起作用。我不知道。我还尝试使用global从方法中使变量全局化,但仍然不起作用。当我试图从views.py文件导入任何内容并做一些事情时,我会得到

File "E:CodingPythonPORTFOLIOSay-It-Socialvenvlibsite-packageschannelsrouting.py", line 30, in get_default_application
raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path)
django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'sayitsocial.asgi'

您可以在URL中使用房间id,并使用以下方法重试:self.room_name = self.scope['url_route']['kwargs']['id']还可以避免在使用者中使用阻塞代码,通过在单独的方法中编写查询来使用异步ORM调用,并使用database_sync_to_async作为装饰器-您可以从channels.db导入它

最新更新