Web开发:React+Flask前后端分离简介与初步实现

一、前言

本文主要简要介绍一下React+Flask的前后端分离开发实现。

1. 前后端分离

前后端分离是一种软件架构模式,旨在将一个应用程序的前端(用户界面)和后端(业务逻辑和数据处理)部分分开开发、管理和部署。这种模式的主要目标是提高开发效率、灵活性和可维护性,同时允许不同类型的开发团队专注于各自的领域。
在前后端分离架构中,前端和后端是独立的两个模块,它们通过网络通信进行交互。下面是关于前后端分离的一些关键特点:
前端(Frontend):

  • 用户界面: 前端负责用户界面的展示,包括页面布局、交互元素、样式和用户体验。
  • 开发技术: 前端可以使用各种技术,如HTML、CSS、JavaScript、框架(例如React、Vue.js、Angular)等来构建交互式的用户界面。
  • 网络请求: 前端通过网络请求从后端获取数据,通常使用AJAX、Fetch API或类似的技术来进行异步通信。

后端(Backend):

  • 业务逻辑: 后端负责应用程序的核心业务逻辑、数据处理、数据库交互和安全验证等。
  • 开发技术: 后端开发可以使用不同的编程语言和框架,如Node.js、Python、Java、Ruby、Flask、Django等。
  • API提供: 后端向前端提供API(Application Programming Interface),用于定义前后端之间的通信协议和数据交换格式(如JSON)。

优势和不足:
优势:

  • 分工合作: 前后端分离允许前端和后端开发团队专注于各自领域,提高开发效率。
  • 可维护性: 分离的架构使得前端和后端的代码更易于维护和扩展。
  • 灵活性: 可以独立开发和部署前后端,从而在技术栈和部署方式上更加灵活。

不足:

  • 跨域问题: 分离的架构可能引发跨域问题,需要适当的跨域策略。
  • 沟通协作: 前后端需要良好的沟通和协作,确保API的设计和接口规范一致。
  • 部署复杂性: 分离架构需要独立部署前后端,可能会增加一些部署和维护的复杂性。

2. 前端框架:React

2.1 React简介

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。它专注于构建高效、交互式和可重用的用户界面组件,使开发者能够轻松地构建复杂的 Web 应用。
以下是 React 框架的一些关键特点和概念:

  • 组件化开发: React 鼓励开发者将用户界面分解为独立的可重用组件,每个组件都有自己的状态(state)和属性(props)。
  • 虚拟 DOM: React 使用虚拟 DOM 来提高性能。它会在内存中创建一个虚拟表示,然后通过比较虚拟 DOM 的变化来最小化实际 DOM 的更新,从而提高页面渲染效率。
  • 单向数据流: React 中的数据流是单向的,从父组件传递属性(props)到子组件,并通过回调函数来处理子组件状态的更改。
  • 声明式编程: React 鼓励使用声明式方式描述 UI,开发者只需关注“什么”需要渲染,而不是“如何”渲染。
  • 生命周期方法: React 组件具有生命周期方法,允许开发者在组件的不同阶段执行特定的操作,如组件挂载、更新和卸载。
  • 组件间通信: React 中的组件可以通过属性(props)和回调函数进行通信。这种通信方式使组件的复用和解耦更加容易。

具体的React框架学习与入门,强烈推荐官方文档,提供中文版。

2.2 TypeScript

TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的一个超集。TypeScript 扩展了 JavaScript,添加了静态类型系统和一些其他编程特性,旨在增强代码的可维护性、可读性和开发时的错误检测能力。当结合TypeScript与React时,可以得到一种更加类型安全的开发体验:

  • 静态类型检查: TypeScript允许你在开发阶段捕获类型错误,减少在运行时出现的意外错误。
  • 代码提示和自动补全: TypeScript可以为你提供更准确的代码提示,帮助你更快速地编写代码。
  • 更好的可维护性: 使用类型可以使你的代码更易于理解和维护,因为类型信息可以提供更多的文档和上下文。
  • 接口和类型别名: TypeScript允许你创建自定义的类型、接口和类型别名,使你的代码更具表现力。
  • 可选的类型: TypeScript的类型可以是可选的,这意味着你可以在需要的地方使用类型,而在其他地方保持普通JavaScript的灵活性。

3. 后端框架:Flask

Flask 是一个基于 Python 的微型Web应用框架,旨在帮助开发者快速构建简单而灵活的Web应用程序。它被设计成非常轻量级,以便于扩展和自定义,同时提供了一些基本工具和结构,使得构建Web应用变得简单。

  • 微型框架: Flask 是一个微型框架,它提供了一些基础功能,但不强迫开发者使用特定的工具或模块。这使得开发者可以根据项目的需求来选择性地添加功能和扩展。
  • 路由: Flask 使用路由来映射 URL 到相应的视图函数。通过定义不同的路由规则,可以实现不同 URL 地址与不同处理逻辑的映射。
  • 视图函数: 视图函数是处理 HTTP 请求的函数,它可以根据请求方法(GET、POST 等)来执行不同的操作,并返回响应内容。
  • 模板引擎: Flask 集成了 Jinja2 模板引擎,允许开发者在视图函数中生成动态的 HTML 页面。模板引擎使得页面的渲染变得更加灵活和可维护。
  • 上下文管理: Flask 提供了应用上下文和请求上下文来管理应用程序状态和请求相关的信息。这有助于在应用中共享数据,如数据库连接。
  • 扩展: Flask 允许通过扩展(Extensions)来集成额外的功能,例如数据库集成、表单处理、身份验证等。这些扩展可以根据项目需求灵活地添加和定制。
  • RESTful 支持: Flask 可以很容易地实现 RESTful API,使得构建 Web 服务和移动应用后端变得方便。

总之,Flask 是一个非常适合小型至中型 Web 应用的框架,特点是灵活、简单、可扩展,适合那些希望快速构建原型或小规模应用的开发者。
Flask的入门学习强烈推荐李辉老师的教程:Flask 入门教程

二、React+Flask前后端分离初步实现

2.1 整体架构

  • React-Flask-demo
    • backend
    • frontend

2.2 backend

创建Flask项目
命令行创建:

mkdir backend
cd backend
touch app.py

或者直接PyCharm创建Flask项目。

app.py

import datetime
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
# 允许跨域传输数据
CORS(app)

nowTime = datetime.datetime.now()


@app.route('/time')
def get_time():
    return {
        'Task': 'Connect the frontend and the backend successfully!',
        'Date': nowTime,
        'Frontend': 'React',
        'Backend': 'Flask'
    }


if __name__ == '__main__':
    app.run(debug=True)

在Flask程序中,我们引入了Flask-CORS扩展,来允许跨域传输,不然的话可能会报错。其他解决跨域传输的办法可以参考这篇文章:
3 Ways to Fix the CORS Error — and How the Access-Control-Allow-Origin Header Works

终端运行:

cd backend
python app.py

或者PyCharm直接点击运行Flask。
记录下Flask运行的端口号:
port

打开浏览器,输入:

http://127.0.0.1:5000/time

我们可以看到:
flask

2.3 frontend

命令行运行:

npx create-react-app frontend --template typescript

或者可以WebStorm/PyCharm创建React项目,勾选上typescript选项。

向package.json文件中添加记录的端口号:

"proxy": "http://127.0.0.1:5000",

package.json

App.tsx

import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
    const [time, setTime] = useState({
        task: '',
        date: '',
        frontend: '',
        backend: ''
    });
    useEffect(() => {
        fetch('/time').then((res) => res.json().then((time) => {
            setTime({
                task: time.Task,
                date: time.Date,
                frontend: time.Frontend,
                backend: time.Backend,
            });
        }));
    }, []);
    return (
        <div className="App">
            <header className="App-header">
                <img src={logo} className="App-logo" alt="logo" />
                <h1>React and Flask</h1>
                <p>{ time.task }</p>
                <p>{ time.date }</p>
                <p>{ time.frontend }</p>
                <p>{ time.backend }</p>
            </header>
        </div>
    );
}

export default App;

使用了两个React中的hook函数,useState以及useEffect。
具体用法可以查阅官方文档。在上面的代码中,useState被用来将从后端获取到的数据传递给前端,useEffect被用来从后端获取数据。
终端运行:

cd frontend
npm start

2.4 实现效果

output

三、参考文献

1. How to connect ReactJS with flask API ?
2. 3 Ways to Fix the CORS Error — and How the Access-Control-Allow-Origin Header Works
此外,下面这篇文章也非常值得参考:
React/Flask Starter App
本文的写作参考了ChatGPT。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Flask实现前后端分离开发的方法是,在 Flask 中只编写后端逻辑,不包含前端界面的代码。同时,使用一些前端的框架(如 React)单独开发前端界面。然后在 Flask 中设置路由,指向前端界面的文件。这样,前端和后端就被分离开来了。 例如,你可以这样做: 1. 在 Flask 中设置一个路由,指向前端界面的文件: ```python @app.route('/') def index(): return send_file('templates/index.html') ``` 2. 使用前端框架(如 React开发前端界面,并将文件放在合适的位置(例如上面代码中的 `templates` 目录)。 3. 在 Flask 中编写后端逻辑,包括处理请求、读写数据库等。 4. 在前端界面中通过 AJAX 请求与 Flask 后端进行交互,从而实现前后端分离。 希望这些信息能帮助你。 ### 回答2: Flask是一种轻量级的Web应用框架,可以与前端框架进行结合,实现前后端分离开发方式。 要实现前后端分离开发,首先需要确定前端框架,比如Vue.jsReact等。这些前端框架负责处理用户界面和用户交互,并通过API与后端进行通信。 在Flask中,我们可以使用Flask-RESTful扩展来实现API。Flask-RESTful提供了一组用于定义和管理RESTful API的工具,包括路由、资源、请求解析和响应序列化等。可以使用类继承的方式创建资源,定义路由和请求方法,并在方法中处理API的业务逻辑。 在后端开发中,我们可以使用Flask提供的模板引擎来渲染动态页面。通过渲染模板,可以将后端数据传递给前端,实现数据的动态展示。 UI设计师和前端工程师可以在前端框架中使用静态资源(如HTML、CSS和JavaScript),来创建用户界面和处理用户交互,同时通过API与后端进行数据交互。 前端框架发起的请求将由Flask-RESTful处理,并根据请求的路由和方法调用相应的资源类和方法。这些方法可以与数据库、文件系统或其他后端服务进行交互,然后返回处理结果。 通过将前后端开发分离,可以提高项目的可维护性和扩展性。前端开发人员可以专注于用户界面和交互,而后端开发人员可以专注于业务逻辑和数据处理。同时,前后端之间的接口定义和协作也更加清晰。 ### 回答3: Flask 是一个轻量级的 Python Web 框架,其设计理念支持前后端分离开发。下面是实现前后端分离开发的一些常用方法和步骤: 1. 搭建后端 API:使用 Flask 框架搭建后端 API,提供数据交互和业务逻辑处理的接口。可以使用 Flask 提供的路由机制,通过装饰器定义 URL 路由和对应的视图函数。在视图函数中,可以通过 JSON 格式返回数据或者通过数据库查询获取数据。 2. 前端开发:前端开发可以选择使用任意框架(如 Vue.jsReact、Angular),通过 AJAX 或 Fetch API 向后端发送请求,并处理返回的数据。可以在前端项目中创建对应文件夹,将后端提供的 API 地址作为请求的 URL,并使用相应的方式获取和展示数据。 3. 跨域资源共享(CORS):由于前后端分离开发中前端和后端分别运行在不同的域名或端口上,浏览器会阻止跨域请求。可以在 Flask 中使用 Flask-CORS 扩展来设置允许跨域请求的配置。 4. 接口规范:为了提高开发效率和代码协作,可以在项目中定义一套接口规范文档。这个文档可以包括接口的名称、参数、返回数据的格式和状态码等信息。前端和后端开发人员可以根据接口规范进行开发和调试,以确保数据的一致性和准确性。 5. 调试和测试:在前后端分离开发中,为了保证接口的正确性和性能的稳定性,可以使用 Postman、Swagger 等工具对后端 API 进行调试和测试。同时可以使用 Jest、Mocha 等前端测试工具对前端代码进行单元测试和集成测试,以保证代码质量和功能的正确性。 通过以上步骤,我们可以实现前后端分离开发,提高项目的开发效率和代码的可维护性。同时也使得前端和后端开发人员能够更好地专注于各自的领域,并实现更好的合作和沟通。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值