You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django重请求场景下请求完成前会话被删除问题求助

解决Django本地重请求下的会话删除错误

问题根源

本地处理重请求(如加载大量图片、返回大量数据)时,SQLite的文件级锁机制会导致多个并发请求读写会话数据时发生冲突,加上手动SQLite连接与Django默认配置的线程设置不一致,最终触发The request's session was deleted before the request completed错误。

替代解决方案

1. 优化SQLite配置搭配默认数据库会话引擎

保留默认的数据库会话引擎django.contrib.sessions.backends.db,通过调整SQLite参数缓解锁冲突:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
        'OPTIONS': {
            'timeout': 20,  # 延长锁超时时间,减少冲突概率
            'check_same_thread': False,  # 与手动连接配置保持一致,避免线程问题
        },
    }
}

同时确保所有手动SQLite连接的线程设置与Django配置统一,避免额外的会话读写冲突。

2. 使用文件会话引擎(开发阶段首选)

文件会话引擎无需依赖数据库,避免锁冲突,且服务器重启后会话不会丢失:

# settings.py
SESSION_ENGINE = "django.contrib.sessions.backends.file"
SESSION_FILE_PATH = BASE_DIR / "sessions"  # 指定会话存储目录,需手动创建并赋予读写权限

默认情况下会话会存在系统临时目录,指定自定义目录更便于开发时管理。

3. 缓存+数据库混合会话引擎

兼顾性能与会话持久化,缓存层处理高频读写,数据库层持久化会话:

# settings.py
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"

# 配置本地缓存(开发阶段可用)
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-cache-key',
    }
}

此方案既解决了重请求下的会话冲突问题,又不会因服务器刷新丢失会话数据。

内容的提问来源于stack exchange,提问作者logan_9997

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:35:12