Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何在中间件中访问会话密钥_Django_Django Middleware - Fatal编程技术网

Django:如何在中间件中访问会话密钥

Django:如何在中间件中访问会话密钥,django,django-middleware,Django,Django Middleware,我无法在自定义Django中间件中访问会话密钥。我尝试使用以下方式访问它: session = Session.objects.get(pk=request.session._session_key) 或 我得到一个错误: Session matching query does not exist. 我已将我的中间件放在我的settings.py文件中django.contrib.sessions.middleware的末尾和后面 我可以在中间件中设置会话密钥,但似乎只有在显示完整页面后才会

我无法在自定义Django中间件中访问会话密钥。我尝试使用以下方式访问它:

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

我得到一个错误:

Session matching query does not exist.
我已将我的中间件放在我的
settings.py
文件中
django.contrib.sessions.middleware
的末尾和后面


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

我可以通过以下方法实现这一点,它对您有用吗

Session.objects.get(session_key=request.session.session_key)

如果不是,那么@ilvar可能是正确的,您试图在会话激活之前访问它。

我设法使它工作。结果表明,通常只有在呈现完整页面后才保存会话

我使用以下方法在中间件中提前保存了会话:

request.session.save()
然后我可以像这样保存我的模型(注意会话后的_id,它允许您在我的案例中设置):


你为什么要问这个问题?为什么不直接访问
request.session
?我有一个引用django_session表的表,例如:session=models.ForeignKey(session),当我使用request.session创建它的实例时,它会给我以下错误:无法分配“”:“Visitor.session”必须是“session”实例。这就是为什么我试图查询session表以获得一个“session”实例。当你点击数据库时,你真的有session键吗?新会话仅在会话中间件上的
process\u response
中创建,因为它们需要存储视图中的任何内容,并且在视图完全处理之前无法这样做。
request.session.save()
visitor = Visitor()
visitor.session_id = request.session.session_key
visitor.save()