“WSGIRequest”对象有没有属性“会议”('WSGIRequest' obj

2019-06-26 17:17发布

我有时会收到此错误在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'

]

因此,会话中间件放在我的中间件之前。 我没有任何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

不知道为什么它会发生在所有。

编辑2012年3月8日12-30

它看起来像浏览器请求图标:

[03/Aug/2012 10:26:42] "GET /favicon.ico/ HTTP/1.1" 404 6701

是否有在Django没有默认的行为来解决这个网址? 因为我没有明确指定视图应该处理此请求。 而且我也不在网页源代码中使用的图标。 所以我想这是谁的浏览器请求/favicon.ico。 我想在404错误的HttpRequest的情况下也不会建立正确所以难怪我在请求对象没有会话。 但是,这只是我的假设。

此外,如果有必要,我使用Django开发服务器,同时收到此错误。

编辑13-00

我已经解决了这个问题,但图标仍然得到错误。 为什么会话可能不要求存在吗?

Answer 1:

这个问题在中间件顺序。

CommonMiddleware返回HttpResponsePermanentRedirect在何时请求URL的情况下已被添加的“www”或尾随“/”(APPEND_SLASH和PREPEND_WWW在设置)。 在这种情况下的Django停止寻找通过为process_request方法中间件列表,并开始运行process_response方法。

这是不好的,没有关于标准的Django中间件这样的行为信息(即中间件可以在某些情况下,HttpResponse对象返回)。



Answer 2:

如果你来到这里,因为你更新的Django 2.0和得到这个错误,你可能想知道这个名字MIDDLEWARE_CLASSES被替换MIDDLEWARE

这里更多https://stackoverflow.com/a/47650447/1218179这里https://docs.djangoproject.com/en/2.0/topics/http/middleware/



文章来源: 'WSGIRequest' object has no attribute 'session'