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 优先方法是使网站“面向未来”的好方法。 前期可能需要更多的工作,但是它提供了更多的灵活性。

相关文章
|
4月前
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
878 0
|
3月前
|
人工智能 前端开发 JavaScript
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
616 18
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
485 83
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
495 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
444 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
8月前
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
2620 64
|
8月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
801 12
|
9月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
10月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
488 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
10月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
525 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡