#django #django-channels
#django #django-каналы
Вопрос:
В django channels 2.1.2 мы можем получить аутентифицированного зарегистрированного пользователя, выполнив следующие действия:
class ChatConsumer(AsyncConsumer):
async def websocket_connect(self,event):
logged_in_user = self.scope['user']
Как мне найти зарегистрированного пользователя в случае каналов 1.1.8 при наследовании WebsocketConsumer от channels.generic.websockets
class ChatConsumer(WebsocketConsumer):
def connect(self, message, **kwargs):
logged_in_user = ?
Ответ №1:
Хорошо, прочитав документацию по каналам django, я получил ответ.Вот ссылка на документацию https://channels.readthedocs.io/en/1.x/generics.html#sessions-and-users
Сеансы и пользователи
Если вы хотите использовать channel_session или channel_session_user с потребителем на основе класса, просто установите одну из переменных в теле класса:
class MyConsumer(WebsocketConsumer):
channel_session_user = True
Это запустит соответствующий декоратор вокруг ваших методов обработчика и предоставит message.channel_session и message.user для объекта message — как того, который передается вашему обработчику в качестве аргумента, так и self.message , поскольку они указывают на один и тот же экземпляр.
И если вы просто хотите использовать пользователя из сеанса django, добавьте http_user:
class MyConsumer(WebsocketConsumer):
http_user = True
Это даст вам message.user, который будет таким же, как request.user, который будет отображаться в обычном представлении.
И если вы хотите использовать как пользователя, так и сеанс из сеанса django, добавьте http_user_and_session:
class MyConsumer(WebsocketConsumer):
http_user_and_session = True
Это даст вам message.user и message.http_session.
следовательно, в этом случае мы можем найти вошедшего в систему пользователя как:
class ChatConsumer(WebscoketConsumer):
http_user=True
def connect(self, message, **kwargs):
logged_in_user = message.user