如何在React中获取Django的request对象?非Token认证场景
解决方案
1. 在Django视图中传递用户数据到模板
修改你的views.py,将用户认证状态和必要信息通过上下文传递给模板:
def index(request): # 组装需要的用户数据 user_data = { 'is_authenticated': request.user.is_authenticated, 'username': request.user.username if request.user.is_authenticated else '' # 可按需添加其他用户字段,如邮箱、昵称等 } return render(request, 'index.html', {'user_data': user_data})
2. 在HTML模板中注入全局JS变量
在index.html中,使用Django的json_script过滤器安全地将用户数据转为全局可访问的JS变量(避免XSS风险),放在React打包文件引入之前:
<!-- 注入用户数据 --> {{ user_data|json_script:"user-data" }} <script> // 解析数据并挂载到window全局对象 const userData = JSON.parse(document.getElementById('user-data').textContent); window.userData = userData; </script> <!-- 你的React打包JS文件引入 --> <script src="{% static 'frontend/dist/main.js' %}"></script>
3. 在React组件中直接使用全局用户数据
在全局侧边栏组件里,直接访问window.userData获取认证状态和用户信息:
import React from 'react'; const GlobalSidebar = () => { const { is_authenticated, username } = window.userData; return ( <aside className="sidebar"> <div className="sidebar-header"> {is_authenticated ? ( <span>当前用户:{username}</span> ) : ( <div className="auth-actions"> <a href="/accounts/login/">登录</a> <a href="/accounts/register/">注册</a> </div> )} </div> {/* 侧边栏其他菜单内容 */} </aside> ); }; export default GlobalSidebar;
注意事项
- 该方案依赖Django默认的Session认证机制,只要用户通过Django的登录流程完成认证,
request.user就会包含有效数据 - 不要在全局变量中存储敏感用户信息(如密码、手机号等),只传递业务需要的公开字段
json_script是Django 2.1+新增的过滤器,若使用旧版本,可手动用json.dumps结合safe过滤器,但要注意XSS防护
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

