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

无需REST框架:Django向ReactJS传输文件及本地JSON数据的方法

无需REST框架实现Django与React的数据/文件传输

一、Django向React传输本地文件

Django后端实现

在Django的views.py中编写普通视图,直接读取本地文件并返回:

from django.http import FileResponse
import os

def serve_file(request):
    # 替换为你的本地文件实际路径
    file_path = os.path.join(os.path.dirname(__file__), 'static/files/sample.pdf')
    # 用FileResponse返回文件,as_attachment=False表示在线预览,设为True则触发下载
    return FileResponse(open(file_path, 'rb'), as_attachment=False)

在urls.py配置对应路由:

from django.urls import path
from . import views

urlpatterns = [
    path('get-file/', views.serve_file, name='get-file'),
]

React前端实现

用fetch API请求文件,处理成Blob后可选择下载或展示:

import { useEffect } from 'react';

function FileHandler() {
    useEffect(() => {
        const fetchAndHandleFile = async () => {
            try {
                const response = await fetch('http://你的Django域名/get-file/');
                const blob = await response.blob();
                // 创建临时下载链接
                const url = window.URL.createObjectURL(blob);
                const downloadLink = document.createElement('a');
                downloadLink.href = url;
                downloadLink.download = 'sample.pdf'; // 设置下载文件名
                document.body.appendChild(downloadLink);
                downloadLink.click();
                // 清理资源
                window.URL.revokeObjectURL(url);
                document.body.removeChild(downloadLink);
            } catch (err) {
                console.error('文件请求失败:', err);
            }
        };

        fetchAndHandleFile();
    }, []);

    return <div>正在获取文件...</div>;
}

export default FileHandler;

二、Django向React传输本地生成的JSON/字典数据

Django后端实现

直接用JsonResponse返回本地生成的字典数据:

from django.http import JsonResponse

def serve_custom_json(request):
    # 本地生成的非数据库来源数据
    custom_data = {
        'title': '自定义数据',
        'content': '这是Django本地生成的JSON内容',
        'details': {
            'version': '1.0',
            'status': 'active',
            'list': ['选项A', '选项B', '选项C']
        }
    }
    return JsonResponse(custom_data)

配置路由:

urlpatterns = [
    # 已有的文件路由
    path('get-json/', views.serve_custom_json, name='get-json'),
]

React前端实现

用fetch请求并解析JSON,将数据展示在页面:

import { useState, useEffect } from 'react';

function JsonDataDisplay() {
    const [data, setData] = useState(null);
    const [isLoading, setIsLoading] = useState(true);

    useEffect(() => {
        const fetchJsonData = async () => {
            try {
                const response = await fetch('http://你的Django域名/get-json/');
                const jsonResult = await response.json();
                setData(jsonResult);
                setIsLoading(false);
            } catch (err) {
                console.error('数据请求失败:', err);
                setIsLoading(false);
            }
        };

        fetchJsonData();
    }, []);

    if (isLoading) return <div>加载中...</div>;
    if (!data) return <div>数据加载失败</div>;

    return (
        <div className="data-container">
            <h2>{data.title}</h2>
            <p>{data.content}</p>
            <h3>详情:</h3>
            <p>版本: {data.details.version}</p>
            <p>状态: {data.details.status}</p>
            <ul>
                {data.details.list.map((item, idx) => (
                    <li key={idx}>{item}</li>
                ))}
            </ul>
        </div>
    );
}

export default JsonDataDisplay;

额外注意

  • 跨域问题:开发阶段可以在React的package.json中添加"proxy": "http://你的Django域名:8000",生产环境则在Django中配置django-cors-headers。
  • 文件权限:确保Django进程有读取目标文件的权限,避免出现文件读取错误。

内容的提问来源于stack exchange,提问作者Sai ganesh Dokala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:15:32