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

相关文章
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
678 83
|
10月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
486 1
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
1056 157
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
2829 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
1065 9
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
312 2
|
前端开发 JavaScript 算法
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
490 0
|
前端开发 JavaScript API
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
489 0

热门文章

最新文章