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

如何不使用数据库且无需API将Django数据传递给React?

无需API将Dynamics CRM数据从Django传递给React的方法

完全可以不用单独的REST API来传递初始数据,以下两种方案都是直接在服务器端把数据注入到React应用中的可行方式:

方法1:模板中直接注入全局变量

在Django视图里调用你的CRM数据获取函数,把数据转成JSON后嵌入到模板的<script>标签里,作为全局变量供React初始化时读取。

示例代码

  • Django视图:
import json
from django.shortcuts import render
from .utils import get_crm_dashboard_data

def dashboard(request):
    crm_data = get_crm_dashboard_data()
    return render(request, 'dashboard.html', {
        'crm_data_json': json.dumps(crm_data)
    })
  • Django模板(dashboard.html):
<!DOCTYPE html>
<html>
<head>
    <!-- 引入React、ReactDOM等依赖 -->
</head>
<body>
    <div id="root"></div>
    <script>
        // 将数据挂载到全局window对象
        window.dashboardInitialData = {{ crm_data_json|safe }};
    </script>
    <script src="{% static 'js/react-bundle.js' %}"></script>
</body>
</html>
  • React组件读取数据:
import { useState } from 'react';

function Dashboard() {
    // 直接从全局变量获取初始数据
    const [data, setData] = useState(window.dashboardInitialData);

    return (
        <div className="dashboard-container">
            {/* 基于data渲染仪表盘内容 */}
        </div>
    );
}

export default Dashboard;

方法2:使用Django的json_script标签(更安全)

Django内置的json_script过滤器可以安全地将JSON数据嵌入到独立的script标签中,避免XSS风险,比直接输出JSON更稳妥。

示例代码

  • Django视图:
from django.shortcuts import render
from .utils import get_crm_dashboard_data

def dashboard(request):
    crm_data = get_crm_dashboard_data()
    return render(request, 'dashboard.html', {'crm_data': crm_data})
  • Django模板:
<div id="root"></div>
{% load static %}
<!-- 用json_script生成安全的script标签 -->
{{ crm_data|json_script:"dashboard-initial-data" }}
<script src="{% static 'js/react-bundle.js' %}"></script>
  • React组件读取数据:
import { useState, useEffect } from 'react';

function Dashboard() {
    const [data, setData] = useState(null);

    useEffect(() => {
        // 从指定的script标签中解析数据
        const dataElement = document.getElementById('dashboard-initial-data');
        const initialData = JSON.parse(dataElement.textContent);
        setData(initialData);
    }, []);

    if (!data) return <div>加载中...</div>;

    return (
        <div className="dashboard-container">
            {/* 渲染仪表盘内容 */}
        </div>
    );
}

export default Dashboard;

补充说明

  • 这两种方案都是初始化时一次性传递数据,如果后续需要实时刷新数据,还是可以写一个轻量的Django API视图——不需要数据库,视图里直接调用你的CRM数据获取函数,实时返回最新结果即可。
  • 不用数据库完全可行,你的Django后端只需要作为数据中转,把Dynamics CRM的实时数据直接传递给前端,不需要持久化存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:54:33