我有时在 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
不知道为什么它会发生。
编辑 03-08-2012 12-30
它看起来像浏览器请求网站图标:
[03/Aug/2012 10:26:42] "GET /favicon.ico/ HTTP/1.1" 404 6701
django 中是否没有默认行为来解析此 url?因为我没有明确指定应该处理这个请求的视图。而且我不在页面源代码中使用网站图标。所以我猜是浏览器请求/favicon.ico。我想如果出现 404 错误,HttpRequest 将无法正确构造,所以难怪我在请求对象中没有会话。但这只是我的假设。
另外,如果有必要,我在收到此错误时正在使用 django dev 服务器。
编辑 13-00
我已经用 favicon 解决了这个问题,但仍然出现错误。为什么请求中可能不存在会话?