首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-Channels:如何从user_id获取channel_name?

Django-Channels:如何从user_id获取channel_name?
EN

Stack Overflow用户
提问于 2021-01-01 11:18:46
回答 1查看 284关注 0票数 0

下面的代码打印客户端的channel_name

代码语言:javascript
复制
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 (需要从消费者外部访问)?类似于下面的内容

代码语言:javascript
复制
import foo
channel_name=foo.get_channel_name_from_user_id(user_id)
print(channel_name)

谢谢!新年快乐!

EN

回答 1

Stack Overflow用户

发布于 2021-01-01 15:37:16

self.channel_name不与用户类关联,而是与“AsyncWebsocketConsumer”关联;

如果需要,可以通过显式定义通道层名称来完全指定基于user_id的channel_name

代码语言:javascript
复制
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

代码语言:javascript
复制
#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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65527082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档