下面的代码打印客户端的channel_name
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name
print(self.channel_name)如何从user_id (user.id)获取经过身份验证的用户的channel_name (需要从消费者外部访问)?类似于下面的内容
import foo
channel_name=foo.get_channel_name_from_user_id(user_id)
print(channel_name)谢谢!新年快乐!
发布于 2021-01-01 15:37:16
self.channel_name不与用户类关联,而是与“AsyncWebsocketConsumer”关联;
如果需要,可以通过显式定义通道层名称来完全指定基于user_id的channel_name
async def connect(self):
user = self.scope['user']
if user.is_anonymous:
print("user was unknown")
await self.close()
else:
await self.channel_layer.group_add(
group=self.doc_pat_grp_id,
channel=user.id#the channel-name
)
await self.accept()Using Channel-layer outside of consumer
#The python code; like you mentioned above.
import foo
from django.contrib.auth import get_user_model
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
#since django runs synchronously and channel_layer runs asynchronous
#we need to explicitly tell channel_layer to run it in synchronous
user = get_user_model()
channel_layer = get_channel_layer()
print(channel_layer)https://stackoverflow.com/questions/65527082
复制相似问题