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

如何用JavaScript获取Django的Session数据?

解决Django Session与前端sessionStorage数据互通问题

首先得明确:Django的request.session是服务器端会话存储,数据存在服务端(默认是数据库),浏览器只存一个用来标识会话的sessionid Cookie;而前端的sessionStorage是浏览器本地的存储对象,两者属于完全独立的存储体系,根本没法直接互相读取。

下面是几种可行的解决方法:

方法1:页面渲染时直接注入到前端

在Django模板里,把服务器端session的theme值直接传给JavaScript,再存入sessionStorage:

<script>
  // 从模板变量获取Django session的theme值,存入sessionStorage
  sessionStorage.setItem('theme', '{{ request.session.theme|escapejs }}');
  // 现在就能正常获取了
  console.log(sessionStorage.getItem('theme'));
</script>

注:用|escapejs过滤器是为了处理特殊字符,避免JS语法错误。

方法2:通过AJAX接口获取

如果需要动态获取(比如页面加载后再请求),可以写一个Django视图接口返回theme值,前端通过AJAX请求:

后端视图(views.py)

from django.http import JsonResponse

def get_user_theme(request):
    # 从session取theme,没有则用默认值'light'
    theme = request.session.get('theme', 'light')
    return JsonResponse({'theme': theme})

配置URL(urls.py)

from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('api/get-theme/', views.get_user_theme, name='get_theme'),
]

前端JS代码

// 用fetch请求接口
fetch('/api/get-theme/')
  .then(res => res.json())
  .then(data => {
    sessionStorage.setItem('theme', data.theme);
    console.log(sessionStorage.getItem('theme'));
  });

方法3:通过隐藏DOM元素传递

把theme值放到页面的隐藏元素里,前端JS读取后存入sessionStorage:

<!-- 模板里添加隐藏元素 -->
<input type="hidden" id="theme-data" value="{{ request.session.theme|escapejs }}">

<script>
  // 读取隐藏元素的值
  const theme = document.getElementById('theme-data').value;
  sessionStorage.setItem('theme', theme);
</script>

注意事项

  • 如果是匿名用户,Django会创建匿名会话,但要确保theme键已经被设置过,否则要给默认值避免空值。
  • 若涉及用户登录状态,记得给视图添加@login_required装饰器(如果只允许登录用户访问)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:50:23