request.session属性在Django中消失了

时间:2013-12-20 04:33:25

标签: python django session django-middleware

所以我重新考虑了我的代码(因为它太丑了,我无法离开它)。并且没有触及settings.py,SessionMiddleware已停止为Django存在。

此追溯是在我删除了需要会话的任何其他中间件之后。每当我调用一个试图从请求中访问会话的函数时就会发生这种情况(正如你所读到的那样)。

AttributeError: 'WSGIRequest' object has no attribute 'session'

之前它是

AssertionError: The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'.

以下是我settings.py关于会议的内容:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

[...]

INSTALLED_APPS += ('django.contrib.sessions',)

# SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SESSION_SAVE_EVERY_REQUEST = True

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake'
    },
    'files_downloads': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake'
    }
}
CACHE_BACKEND = 'locmem://'

有没有人知道我的服务器发生了什么?

编辑:我在StackOverflow上找到了许多类似的问题(还有一些几乎是我的副本),我试过了。我在这里看不到任何东西?

1 个答案:

答案 0 :(得分:0)

由于我认为这对许多新的Django开发人员感兴趣,我会告诉我如何解决它作为答案。

我通过卸载并重新安装Django解决了这个问题。

显然在卸载了一些与Django相关的不必要的软件包之后,会话中间件“消失”或者已经损坏(仍然试图在这里解决)。但事实证明它是用新的Django安装修复的(因为它是一个默认的Django中间件)。