Django-Channels 2 не сохраняются данные сеанса, установленные в `connect`

каналы == 2.1.2 | channels-redis == 2.2.1 | Дафна == 2.2.0 | Джанго == 1.11.6

Я обновил до каналов 2 специально для возможности доступа и изменения сеанса от пользователя (и доступа к нему в представлении), но это, похоже, не работает. В принципе, я хочу идентифицировать AnonymousUsers и routing.py их сообщения (каждый из них, а не все вместе).

Вот мой файл:application = ProtocolTypeRouter({ # (http->django views is added by default) 'websocket': AuthMiddlewareStack( URLRouter( core.routing.websocket_urlpatterns ) ), })

consumers.py

Вот мой файл:class ChatConsumer(WebsocketConsumer): def connect(self): if self.scope['user'].is_authenticated: user_id = str(self.scope['user'].id) self.scope['session']['user_identifier']= user_id self.group_name = user_id else: user_id = str(self.scope['user']) + str(uuid.uuid4()) self.scope['session']['user_identifier'] = user_id self.group_name = user_id self.scope['session'].save() print(f" in consumer: {self.scope['session']['user_identifier']}") # Join room group async_to_sync(self.channel_layer.group_add)( self.group_name, self.channel_name ) self.accept()

send

И в представлении, где мне нужно использовать send, я пытаюсь получить group_name ( user_identifier) из сеанса в случае анонимного пользователя:

def get_spotify_link(request):
    if request.user.is_authenticated:
        user_identifier = str(request.user.id)
    else:
        user_identifier = request.session['user_identifier']
        print(f"in get_spotify_link: {user_identifier}")

Тем не менее, я с перерывами (ну, 99% времени) получаю KeyError: 'user_identifier'.

Internal Server Error: /get_spotify_link/
Traceback (most recent call last):
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/myusername/PycharmProjects/artist_notify/core/views.py", line 442, in get_spotify_link
    user_identifier = request.session['user_identifier']
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py", line 57, in __getitem__
    return self._session[key]
KeyError: 'user_identifier'
[2018/07/08 20:54:03] WebSocket HANDSHAKING / [127.0.0.1:65478]
 in consumer: AnonymousUser8883761c-f673-413e-82e2-413d1cbb17e3
[2018/07/08 20:54:03] WebSocket CONNECT / [127.0.0.1:65478]
Internal Server Error: /get_spotify_link/
Traceback (most recent call last):
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/myusername/PycharmProjects/artist_notify/core/views.py", line 442, in get_spotify_link
    user_identifier = request.session['user_identifier']
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py", line 57, in __getitem__
    return self._session[key]
KeyError: 'user_identifier'

django,django-channels,

1

Ответов: 0

Django-Channels 2 не сохраняются данные сеанса, установленные в `connect`

каналы == 2.1.2 | channels-redis == 2.2.1 | Дафна == 2.2.0 | Джанго == 1.11.6

Я обновил до каналов 2 специально для возможности доступа и изменения сеанса от пользователя (и доступа к нему в представлении), но это, похоже, не работает. В принципе, я хочу идентифицировать AnonymousUsers и routing.py их сообщения (каждый из них, а не все вместе).

Вот мой файл:application = ProtocolTypeRouter({ # (http->django views is added by default) 'websocket': AuthMiddlewareStack( URLRouter( core.routing.websocket_urlpatterns ) ), })

consumers.py

Вот мой файл:class ChatConsumer(WebsocketConsumer): def connect(self): if self.scope['user'].is_authenticated: user_id = str(self.scope['user'].id) self.scope['session']['user_identifier']= user_id self.group_name = user_id else: user_id = str(self.scope['user']) + str(uuid.uuid4()) self.scope['session']['user_identifier'] = user_id self.group_name = user_id self.scope['session'].save() print(f" in consumer: {self.scope['session']['user_identifier']}") # Join room group async_to_sync(self.channel_layer.group_add)( self.group_name, self.channel_name ) self.accept()

send

И в представлении, где мне нужно использовать send, я пытаюсь получить group_name ( user_identifier) из сеанса в случае анонимного пользователя:

def get_spotify_link(request):
    if request.user.is_authenticated:
        user_identifier = str(request.user.id)
    else:
        user_identifier = request.session['user_identifier']
        print(f"in get_spotify_link: {user_identifier}")

Тем не менее, я с перерывами (ну, 99% времени) получаю KeyError: 'user_identifier'.

Internal Server Error: /get_spotify_link/
Traceback (most recent call last):
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/myusername/PycharmProjects/artist_notify/core/views.py", line 442, in get_spotify_link
    user_identifier = request.session['user_identifier']
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py", line 57, in __getitem__
    return self._session[key]
KeyError: 'user_identifier'
[2018/07/08 20:54:03] WebSocket HANDSHAKING / [127.0.0.1:65478]
 in consumer: AnonymousUser8883761c-f673-413e-82e2-413d1cbb17e3
[2018/07/08 20:54:03] WebSocket CONNECT / [127.0.0.1:65478]
Internal Server Error: /get_spotify_link/
Traceback (most recent call last):
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/myusername/PycharmProjects/artist_notify/core/views.py", line 442, in get_spotify_link
    user_identifier = request.session['user_identifier']
  File "/Users/myusername/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py", line 57, in __getitem__
    return self._session[key]
KeyError: 'user_identifier'
01Джанго, Джанго-каналы,
Похожие вопросы