【问题标题】:request.session attribute has disappeared in Djangorequest.session 属性在 Django 中消失了
【发布时间】:2014-01-08 21:15:11
【问题描述】:

所以我正在重构我的代码(因为它太丑了,我无法离开它)。并且在不触及 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 上发现了许多类似的问题(还有一些几乎是我的副本),我已经尝试过了。有什么我在这里看不到的吗?

【问题讨论】:

  • 你试过运行syncdb吗?
  • 是的。我确实尝试过并清理了以前的会话。
  • 原来我安装的 Django 已损坏。所有项目(即使是新的和未更改的项目都有这个问题)。与代码或我的项目设置无关。

标签: python django session django-middleware


【解决方案1】:

由于我相信许多新的 Django 开发人员都会对此感兴趣,因此我将讲述我是如何解决它的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2017-01-13
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    相关资源
    最近更新 更多