我无法访问自定义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
的任何提示都非常受欢迎。
答案 0 :(得分:5)
我设法让它发挥作用。事实证明,通常只有在渲染完整页面后才会保存会话。
我设法使用以下方法在中间件中过早保存会话:
request.session.save()
然后我可以保存我的模型(请注意会话后的_id,这允许您在我的情况下设置foreign key using only an integer or varchar):
visitor = Visitor()
visitor.session_id = request.session.session_key
visitor.save()
答案 1 :(得分:1)
我能够用以下方法做到这一点,它对你有用吗?
Session.objects.get(session_key=request.session.session_key)
如果没有,或许@ilvar在您激活之前尝试访问会话是正确的。