如何用React.js渲染Django序列化器模板并实现数据交互?
用React.js对接Django API实现数据渲染与操作
一、数据交互工具选择
- 优先用Axios:轻量、基于Promise的HTTP库,请求/响应处理逻辑简洁,是React生态里对接后端API的常用选择。
- 原生
fetchAPI也可直接使用,无需额外安装依赖,但Axios的错误处理、请求拦截器等功能更省心。 - jQuery完全没必要,现代React项目不会依赖它做HTTP请求,冗余且不符合前端开发趋势。
二、核心实现步骤
1. 安装Axios(可选)
在React项目根目录执行命令:
npm install axios # 或用yarn yarn add axios
2. 获取Django数据并渲染(GET请求)
创建React组件,在挂载阶段请求Django API拉取数据,再渲染模型的id、name等字段:
import React, { useState, useEffect } from 'react'; import axios from 'axios'; const ModelDataList = () => { const [modelItems, setModelItems] = useState([]); useEffect(() => { // 替换为你的Django API GET接口地址 axios.get('http://localhost:8000/api/your-model/') .then(res => setModelItems(res.data)) .catch(err => console.error('拉取数据失败:', err)); }, []); return ( <div className="model-list"> <h3>Django模型数据</h3> <ul> {modelItems.map(item => ( <li key={item.id}> <span>ID: {item.id}</span> <span> | 名称: {item.name}</span> </li> ))} </ul> </div> ); }; export default ModelDataList;
3. 提交数据到Django(POST请求,给字段赋值)
创建表单组件,收集用户输入后通过POST请求将数据发送到Django API,完成模型字段赋值:
import React, { useState } from 'react'; import axios from 'axios'; const CreateModelItem = () => { const [name, setName] = useState(''); const handleSubmit = (e) => { e.preventDefault(); // 替换为你的Django API POST接口地址 axios.post('http://localhost:8000/api/your-model/', { name: name // 其他字段可在此处添加,例如description: desc }) .then(res => { console.log('数据提交成功:', res.data); setName(''); // 清空表单 }) .catch(err => console.error('提交失败:', err)); }; return ( <form onSubmit={handleSubmit} className="model-form"> <div> <label>名称:</label> <input type="text" value={name} onChange={(e) => setName(e.target.value)} required /> </div> <button type="submit">创建条目</button> </form> ); }; export default CreateModelItem;
三、关键注意事项
- 跨域配置:Django默认禁止跨域请求,需安装
django-cors-headers并在配置中允许React项目的域名(如http://localhost:3000)。 - API序列化:确保Django的Serializer正确返回
id、name等需要的字段,避免React解析数据出错。 - 复杂场景处理:如果项目数据交互逻辑复杂,可结合React Context或Redux做全局状态管理,避免组件间状态混乱。
内容的提问来源于stack exchange,提问作者James Davidson
相关产品推荐
相关产品推荐

