我无法访问自定义Django中间件中的session_key。我尝试使用以下方式访问它:

session = Session.objects.get(pk=request.session._session_key)

要么
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
session = Session.objects.get(pk=session_key)

我得到错误:
Session matching query does not exist.

我已经将中间件放在MIDDLEWARE_CLASSES的末尾,并将django.contrib.sessions.middleware.SessionMiddleware放在settings.py文件中。

我可以在中间件中设置会话密钥,但是看起来好像session_key仅在显示整个页面后才生成/可访问。因为当第一次显示页面时,{{ request.session.session_key }}在我的模板中返回None。当我刷新页面时,可以看到session_key。非常欢迎您提供有关如何访问session_key的任何提示。

最佳答案

我设法使它起作用。事实证明,通常仅在呈现整个页面后才保存会话。

我设法使用以下方式将会话过早地保存在中间件中:

request.session.save()

然后,我可以像这样保存模型(请注意会话后的_id,这使您可以在自己的情况下设置foreign key using only an integer or varchar):
visitor = Visitor()
visitor.session_id = request.session.session_key
visitor.save()

关于django - Django:如何在中间件中访问session_key,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10641142/

10-10 09:06