Используя Django REST Framework в разработке, у меня есть следующий (ранее работающий) пример кода, где в одном представлении я устанавливаю данные сеанса, а в другом - эти данные.
И, как я уже сказал,этот код работал, но теперь по какой-то причине к сохраненным данным сеанса больше нельзя получить доступ.
Просмотр для установки данных сеанса
@api_view(["POST"])
@permission_classes((AllowAny, ))
def set_session_data(request):
session_data_dict = loads(request.body.decode('utf-8'))
if not isinstance(session_data_dict, dict):
return Response({"message": "Expected a JSON object with key-val pairs to be sent. Key-val pairs to be set to session. Received something else.", status: status.HTTP_400_BAD_REQUEST})
try:
for key, value in session_data_dict.items():
request.session[key] = value
response_data = {"status": rest_status.HTTP_200_OK}
except:
response_data = {"status": rest_status.HTTP_500_INTERNAL_SERVER_ERROR}
return Response(response_data)
Просмотр доступа к сохраненным данным сеанса:
@api_view(["GET"])
@permission_classes((AllowAny, ))
def check_user_logged_in(request):
try:
data = {"login_token": request.session["login_token"]}
except KeyError:
data = {"login_token": ""}
return Response(data, status=rest_status.HTTP_200_OK)
Я немного протестировал, и я могу получить доступ к данным в сеансе в представлении set_session_data
после его добавления, например:
request.session['login_token']
Но когда я пытаюсь сделать то же самое в представлении check_user_logged_in
, я получаю KeyError
.
Поэтому я попытался проверить, являются ли сеансы для обоих представлений одним и тем же сеансом, проверив значение request.COOKIES[settings.SESSION_COOKIE_NAME]
в каждом представлении.Но в обоих представлениях это приводит к следующей ошибке:
KeyError: 'sessionid'
Теперь я не коснулся настроек сеанса, поэтому они являются настройками по умолчанию django-admin startproject
.('django.contrib.sessions'
в INSTALLED_APPS
, 'django.contrib.sessions.middleware.SessionMiddleware'
в MIDDLEWARE
и ничего не добавлено.)
Кто-нибудь может объяснить, почему это происходит?