在开发中使用Django REST框架,我有以下(以前工作的)代码示例,其中一个视图中设置会话数据,而另一个视图中使用该数据。
就像我说的那样,这段代码曾经可以工作,但是现在由于某种原因,无法再访问存储的会话数据。
用于设置会话数据的视图
@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
,并且未添加任何内容。)
谁能解释为什么会这样?