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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:35:31