如何不使用数据库且无需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
相关产品推荐
相关产品推荐

