Django API 开发:Todo 应用的 React 前端(下)

简介: API 的功能在于与其他程序进行通信。 在本文中,我们将通过 React 前端使用上一篇文章中的 Todo API,这样您就可以了解实际中一切如何协同工作。

模拟数据

如果您返回到我们的 API 端点,则可以在以下位置的浏览器中看到原始 JSON:http://127.0.0.1:8000/api/?format=json

[ 
  {
    "id":1,
    "title":"1st todo", 
    "body":"Learn Django properly."
  }, 
  {
    "id":2, 
    "title":"Second item", 
    "body":"Learn Python."
  }, 
  {
    "id":3,
    "title":"Learn HTTP", 
    "body":"It's important."
  } 
]


每当向 API 端点发出 GET 请求时,就会返回此值。 最终,我们将直接使用该 API ,但是一个好的初始步骤是首先模拟数据,然后配置我们的 API 调用。


我们需要在 React 应用程序中更新的唯一文件是 src/App.js。 首先,在一个名为 list 的变量中模拟 API 数据,该变量实际上是一个具有三个值的数组。

// src/App.js
import react, { Component } from 'react';
const list = [
  {
    "id":1,
    "title":"1st todo",
    "body":"Learn Django properly."
  },
  {
    "id":2,
    "title":"Second item",
    "body":"Learn Python."
  },
  {
    "id":3,
    "title":"Learn HTTP",
    "body": "It's important."
  }
]


接下来,我们将列表加载到组件的状态,然后使用 JavaScript 数组方法 map() 显示所有项目。


我故意在这里快速移动,如果您以前从未使用过 React,请复制代码,以便您了解如何将 React 前端连接到我们的 Django 后端。


这是现在包含在 src/App.js 文件中的完整代码。

// SRC/App.js
import React, { Component } from 'react';
const list = [
  {
    "id":1,
    "title":"1st todo",
    "body":"Learn Django properly."
  },
  {
    "id":2,
    "title":"second item",
    "body":"Learn Python."
  },
  {
    "id":3,
    "title":"Learn HTTP",
    "body":"It's important."
  }
]
class App extends Component {
  constructor(props) {
    super(props);
    this.state = { list };
  }
  render(){
    return (
      <div>
      {this.state.list.map(item => (
       <div key={item.id}>
          <h1>{item.title}</h1>
          <p>{item.body}</p>
      </div>
       ))}
      </div>
    );
  }
}
export default App;


我们已将列表加载到 App 组件的状态中,然后使用地图在列表中的每个项目上循环显示每个项目的标题和正文。 我们还添加了 id 作为密钥,这是 React 特定的要求; Django 自动为我们将 id 添加到每个数据库字段中。现在,您应该在主页上的 http://localhost:3000/上看到我们的待办事项,而无需刷新页面。



image.png

注意:如果您使用 React,运行 npm start , 可能会在某些时候看到错误消息 sh:react-scripts:command not found 。 不要惊慌。 这是 JavaScript 开发中非常普遍的问题。 该修补程序通常是运行 npm install,然后尝试再次启动 npm。 如果那不起作用,则删除您的 node_modules 文件夹并运行 npm install 。 那可以 99% 的时间解决问题。 欢迎使用现代 JavaScript 开发:)。

Django REST Framework + React

现在,让我们真正使用 Todo API,而不是使用 list 变量中的模拟数据。 在另一个命令行控制台中,我们的 Django 服务器正在运行,并且我们知道列出所有待办事项的 API 端点位于http://127.0.0.1:8000/api/。 因此,我们需要向它发出 GET 请求。


发出 HTTP 请求的两种流行方法是:使用内置的 Fetch APIaxios ,它具有一些附加功能。 在此示例中,我们将使用 axios。 使用 Control + c 停止当前在命令行上运行的 React 应用。 然后安装 axios。

$ npm install axios


过去,开发人员会在 npm 命令中添加 --save 标志,以将依赖项保存在 package.json 文件中。 结果,您经常会看到上述命令写为 npm install axios --save。 但是,npm 的最新版本默认情况下使用 –save ,因此不再需要显式添加 --save 标志。


使用 npm start 重新启动 React 应用。

$ npm start


然后在 App.js 文件顶部的文本编辑器中,导入 Axios 。

// src/App.js
import React, { Component } from 'react';
import axios from 'axios'; // new
...


剩下两个步骤。 首先,我们将 axios 用于 GET 请求。 为此,我们可以创建专用的 getTodos 函数。


其次,我们要确保在 React 生命周期中的正确时间发出此 API 调用。 HTTP 请求应该使用componentDidMount 发出,因此我们将在此处调用 getTodos 。我们也可以删除模拟列表,因为它不再需要了。 现在,我们完整的 App.js 文件将如下所示。

// src/App.js
import React, { Component } from 'react'; 
import axios from 'axios'; // new
class App extends Component { 
  state = {
    todos: [] 
  };
  // new
  componentDidMount() { 
    this.getTodos();
}
  // new
  getTodos() {
    axios
      .get('http://127.0.0.1:8000/api/') 
      .then(res => {
        this.setState({ todos: res.data }); 
    })
    .catch(err => { 
      console.log(err);
    }); 
  }
  render() { 
    return (
    <div>
      {this.state.todos.map(item => (
        <div key={item.id}> 
          <h1>{item.title}</h1> 
          <span>{item.body}</span>
        </div> 
      ))}
    </div> 
  );
 }
}
export default App;


如果您再次查看 http://localhost:3000/,即使我们不再具有硬编码的数据,页面也一样。 所有这些都来自我们的 API 端点并立即提出要求。


image.png


这就是 React 的工作方式!

总结

现在,我们已将 Django 后端 API 连接到 React 前端。 更好的是,我们可以选择将来更新前端,或者随着项目需求的变化而完全替换掉。


这就是为什么采用 API 优先方法是使网站“面向未来”的好方法。 前期可能需要更多的工作,但是它提供了更多的灵活性。

相关文章
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
3月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
3月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
1043 0
|
2月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
3月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
2月前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。
|
2月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
4月前
|
测试技术 API 开发工具
API文档该怎么写,开发效率能翻几倍?
API文档是提升开发效率与协作的关键因素,本文探讨了API文档的核心要素、常见类型及编写规范,并介绍了如何借助现代化工具如Apifox实现高效管理与维护,助力团队打造高质量的API文档体系。
|
4月前
|
算法 前端开发 API
京东比价项目开发实录:京东API接口(2025)
本文分享了作者在电商开发中对接京东商品详情API的实战经验,涵盖了申请权限、签名算法、限流控制、数据解析等常见问题,并提供了亲测有效的Python代码示例,帮助开发者避坑。
|
4月前
|
人工智能 API 定位技术
MCP 开发实战:手把手教你封装高德地图与 arXiv API
本教程为 MCP(Model Context Protocol)开发实战第二阶段,带你从零封装第三方 API 为 AI 模型可用工具。通过高德地图地理编码与 arXiv 论文检索两个实例,涵盖项目搭建、工具声明、资源定义、错误处理等核心内容,助你快速上手 MCP 开发并集成至 Claude 使用。

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改