gpt4 book ai didi

django - 'WSGIRequest' 对象没有属性 'session'

转载 作者:行者123 更新时间:2023-12-03 21:39:55 26 4
gpt4 key购买 nike

我有时会在 process_response 方法中的自定义中间件中收到此错误。我有以下中间件列表:

MIDDLEWARE_CLASSES = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'application.middleware.LastCampaignSessionMiddleware'

]

所以 session 中间件放在我的中间件之前。我没有 del request.session源代码中的表达式。
这是 process_response 方法:
    def process_response(self, request, response):
if 'last_campaign_id' in request.session and request.session['last_campaign_id']:
if request.COOKIES['last_campaign_id'] != request.session['last_campaign_id']:
response.set_cookie('last_campaign_id', request.session['last_campaign_id'])
return response

不知道为什么它会发生。

编辑 03-08-2012 12-30

它看起来像浏览器请求图标:
[03/Aug/2012 10:26:42] "GET /favicon.ico/ HTTP/1.1" 404 6701

django 中是否没有默认行为来解析此 url?因为我没有明确指定应该处理这个请求的 View 。而且我不在页面源代码中使用网站图标。所以我猜是浏览器请求/favicon.ico。我想在 404 错误的情况下 HttpRequest 不会正确构造所以难怪我在请求对象中没有 session 。但这只是我的假设。

此外,如果有必要,我会在收到此错误时使用 django dev 服务器。

编辑 13-00

我已经用 favicon 解决了这个问题,但仍然出错。为什么请求中可能不存在 session ?

最佳答案

问题出在中间件顺序上。

CommonMiddleware 返回 HttpResponsePermanentRedirect 在请求 url 已添加“www”或尾随“/”(设置中的 APPEND_SLASH 和 PREPEND_WWW)的情况下。在这种情况下,django 停止查看 process_request 方法的中间件列表并开始运行 process_response 方法。

糟糕的是,没有关于标准 django 中间件的这种行为的信息(即中间件在某些情况下可能返回 HttpResponse 对象)。

关于django - 'WSGIRequest' 对象没有属性 'session',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com