跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonSaaS大前端

Python 与前端集成:构建全栈应用

Python 与前端框架集成的全栈应用构建方法。内容涵盖使用 FastAPI 和 Flask 设计 RESTful API,与 React 和 Vue 进行前端集成,处理 JSON 数据传输及 CORS 跨域问题,实施 JWT 认证与授权,以及利用 Docker 和 Docker Compose 进行前后端部署。此外,还对比了 Python 与 Rust 的技术特点,并提供了全栈项目实践推荐及常见问题解决方案。

忘忧发布于 2026/4/6更新于 2026/9/778 浏览

Python 与前端集成:构建全栈应用

前言

Python 作为后端与前端框架的结合,能够构建出功能强大的全栈应用。本文将介绍如何使用 Python 框架设计后端 API,并与主流前端框架集成,实现数据传输、认证授权及部署。

一、后端 API 设计

1.1 使用 FastAPI 创建 RESTful API

FastAPI 是一个现代化的 Python Web 框架,非常适合构建 RESTful API:

from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Item(BaseModel):
    id: int
    name: str
    price: float
    is_offer: bool = None

items = []

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    for item in items:
        if item.id == item_id:
            return item
    return {"error": "Item not found"}

@app.post("/items/")
def create_item():
    items.append(item)
     item


 ():
     i, existing_item  (items):
         existing_item. == item_id:
            items[i] = item
             item
     {: }


 ():
     i, item  (items):
         item. == item_id:
            items.pop(i)
             {: }
     {: }

目录

  1. Python 与前端集成:构建全栈应用
  2. 前言
  3. 一、后端 API 设计
  4. 1.1 使用 FastAPI 创建 RESTful API
  5. 1.2 使用 Flask 创建 RESTful API
  6. 二、前端框架集成
  7. 2.1 与 React 集成
  8. 2.2 与 Vue 集成
  9. 三、数据传输
  10. 3.1 JSON 数据格式
  11. 后端返回 JSON 数据
  12. 3.2 处理 CORS
  13. FastAPI 处理 CORS
  14. 配置 CORS
  15. Flask 处理 CORS
  16. 四、认证与授权
  17. 4.1 JWT 认证
  18. FastAPI 中使用 JWT
  19. 五、部署
  20. 5.1 部署后端
  21. Dockerfile
  22. 5.2 部署前端
  23. 5.3 完整部署
  24. docker-compose.yml
  25. 六、Python 与 Rust 的对比
  26. 6.1 前端集成对比
  27. 6.2 学习心得
  28. 七、实践项目推荐
  29. 7.1 全栈项目
  30. 八、学习方法和技巧
  31. 8.1 学习方法
  32. 8.2 常见问题和解决方法
  33. 九、总结

更多推荐文章

查看全部
  • Java 后端 Web API 开发实战指南
  • 基于 Embedchain 实现本地化低成本私人知识库搭建
  • Go 语言中 unsafe.Pointer、uintptr 与指针的关系解析
  • 基于Flink CDC的Neo4j实时图数据库同步实战
  • Android 核心源码与 Framework 精编解析指南
  • Seedance 2.0 智能资源画像与 Terraform 算力预算方案实践
  • AI 产品经理面试 20 个核心问题及备考策略
  • AI 产品经理职业发展路线与核心能力构建指南
  • Web 项目 UI 自动化测试实战:从零搭建博客系统测试框架
  • 基于 OpenClaw 框架在 Discord 部署 AI 对话机器人实战指南
  • Android 面试核心知识点与真题解析指南
  • Leaflet 结合 SpringBoot 实现地图点击获取当地时间
  • 算法域全景可观测性从 0 到 1 的演进与实践
  • OpenClaw 对接飞书机器人:插件安装、回调配置与配对避坑指南
  • Linux 下 libwebkit2gtk-4.1-0 安装与配置指南
  • LangChain 实战:工具调用与结构化输出
  • Retinaface+CurricularFace 镜像内 Python 3.11.14 安全补丁升级方法
  • Flutter wasm_ffi 在鸿蒙端的适配与实战指南
  • Harness Engineering 深度解读:AI Agent 时代的缰绳与马鞍
  • Python 核心技术点汇总:装饰器、拷贝及数据结构

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

item: Item
return
@app.put("/items/{item_id}")
def
update_item
item_id: int, item: Item
for
in
enumerate
if
id
return
return
"error"
"Item not found"
@app.delete("/items/{item_id}")
def
delete_item
item_id: int
for
in
enumerate
if
id
return
"message"
"Item deleted"
return
"error"
"Item not found"
1.2 使用 Flask 创建 RESTful API

Flask 是另一个流行的 Python Web 框架,也可以用于构建 RESTful API:

from flask import Flask, request, jsonify

app = Flask(__name__)
items = []

@app.route('/', methods=['GET'])
def read_root():
    return jsonify({"message": "Hello, World!"})

@app.route('/items/<int:item_id>', methods=['GET'])
def read_item(item_id):
    for item in items:
        if item['id'] == item_id:
            return jsonify(item)
    return jsonify({"error": "Item not found"})

@app.route('/items/', methods=['POST'])
def create_item():
    item = request.get_json()
    items.append(item)
    return jsonify(item)

@app.route('/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
    item = request.get_json()
    for i, existing_item in enumerate(items):
        if existing_item['id'] == item_id:
            items[i] = item
            return jsonify(item)
    return jsonify({"error": "Item not found"})

@app.route('/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
    for i, item in enumerate(items):
        if item['id'] == item_id:
            items.pop(i)
            return jsonify({"message": "Item deleted"})
    return jsonify({"error": "Item not found"})

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

二、前端框架集成

2.1 与 React 集成

React 是一个流行的前端框架,可以与 Python 后端 API 集成:

// App.js
import React, { useState, useEffect } from 'react';

function App() {
    const [items, setItems] = useState([]);
    const [newItem, setNewItem] = useState({ id: '', name: '', price: '', is_offer: false });

    useEffect(() => {
        fetch('http://localhost:8000/items/')
            .then(response => response.json())
            .then(data => setItems(data));
    }, []);

    const handleSubmit = (e) => {
        e.preventDefault();
        fetch('http://localhost:8000/items/', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(newItem),
        })
        .then(response => response.json())
        .then(data => {
            setItems([...items, data]);
            setNewItem({ id: '', name: '', price: '', is_offer: false });
        });
    };

    return (
        <div>
            <h1>Items</h1>
            <ul>
                {items.map(item => (
                    <li key={item.id}>{item.name} - ${item.price}</li>
                ))}
            </ul>
            <form onSubmit={handleSubmit}>
                <input type="text" placeholder="ID" value={newItem.id} onChange={(e) => setNewItem({...newItem, id: parseInt(e.target.value)})} />
                <input type="text" placeholder="Name" value={newItem.name} onChange={(e) => setNewItem({...newItem, name: e.target.value})} />
                <input type="number" placeholder="Price" value={newItem.price} onChange={(e) => setNewItem({...newItem, price: parseFloat(e.target.value)})} />
                <button type="submit">Add Item</button>
            
        
    );
}

export default App;
2.2 与 Vue 集成

Vue 是另一个流行的前端框架,也可以与 Python 后端 API 集成:

<!-- App.vue -->
<template>
    <div>
        <h1>Items</h1>
        <ul>
            <li v-for="item in items" :key="item.id">{{ item.name }} - ${{ item.price }}</li>
        </ul>
        <form @submit.prevent="handleSubmit">
            <input type="text" placeholder="ID" v-model.number="newItem.id" />
            <input type="text" placeholder="Name" v-model="newItem.name" />
            <input type="number" placeholder="Price" v-model.number="newItem.price" />
            <button type="submit">Add Item</button>
        </form>
    </div>
</template>

<script>
export default {
    data() {
        return {
            items: [],
            newItem: { id: '', name: '', price: '', is_offer: false }
        };
    },
    mounted() {
        this.fetchItems();
    },
    methods: {
        fetchItems() {
            fetch('http://localhost:8000/items/')
                .then(response => response.json())
                .then(data => { this.items = data; });
        },
        handleSubmit() {
            fetch('http://localhost:8000/items/', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify(this.newItem),
            })
            .then(response => response.json())
            .then(data => {
                this.items.push(data);
                this.newItem = { id: '', name: '', price: '', is_offer: false };
            });
        }
    }
};
</script>

三、数据传输

3.1 JSON 数据格式

JSON 是前后端数据传输的标准格式:

# 后端返回 JSON 数据
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    id: int
    name: str
    price: float

@app.get("/item", response_model=Item)
def get_item():
    return {"id": 1, "name": "Item 1", "price": 10.99}
3.2 处理 CORS

跨域资源共享(CORS)是前后端集成中常见的问题:

# FastAPI 处理 CORS
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# 配置 CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"], # 在生产环境中应该设置具体的域名
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}
# Flask 处理 CORS
from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app) # 允许所有跨域请求

@app.route('/')
def read_root():
    return jsonify({"message": "Hello, World!"})

四、认证与授权

4.1 JWT 认证

JSON Web Token(JWT)是一种常用的认证方式:

# FastAPI 中使用 JWT
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from jose import JWTError, jwt
from datetime import datetime, timedelta
from pydantic import BaseModel

app = FastAPI()

SECRET_KEY = "your-secret-key"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

fake_users_db = {
    "alice": {
        "username": "alice",
        "full_name": "Alice Smith",
        "email": "[email protected]",
        "hashed_password": "fakehashedsecret",
        "disabled": False,
    }
}

def fake_hash_password(password: str):
    return "fakehashed" + password

def verify_password(plain_password, hashed_password):
    return hashed_password == fake_hash_password(plain_password)

def get_user(db, username: str):
    if username in db:
        user_dict = db[username]
        return user_dict

def create_access_token(data: dict, expires_delta: timedelta = None):
    to_encode = data.copy()
    if expires_delta:
        expire = datetime.utcnow() + expires_delta
    else:
        expire = datetime.utcnow() + timedelta(minutes=15)
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
    return encoded_jwt

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

async def get_current_user(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username: str = payload.get("sub")
        if username is None:
            raise credentials_exception
    except JWTError:
        raise credentials_exception
    user = get_user(fake_users_db, username=username)
    if user is None:
        raise credentials_exception
    return user

@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
    user = get_user(fake_users_db, form_data.username)
    if not user:
        raise HTTPException(status_code=400, detail="Incorrect username or password")
    if not verify_password(form_data.password, user["hashed_password"]):
        raise HTTPException(status_code=400, detail="Incorrect username or password")
    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    access_token = create_access_token(
        data={"sub": user["username"]},
        expires_delta=access_token_expires
    )
    return {"access_token": access_token, "token_type": "bearer"}

@app.get("/users/me")
async def read_users_me(current_user: dict = Depends(get_current_user)):
    return current_user

五、部署

5.1 部署后端

使用 Docker 部署 Python 后端:

# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
5.2 部署前端

使用 Vercel、Netlify 等平台部署前端:

  • Vercel:适合部署 React、Next.js 应用
  • Netlify:适合部署 Vue、React 应用
  • GitHub Pages:适合部署静态网站
5.3 完整部署

使用 Docker Compose 部署前后端:

# docker-compose.yml
version: '3'
services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

六、Python 与 Rust 的对比

在技术选型方面,Python 与 Rust 各有特点:

6.1 前端集成对比
  • Python:生态丰富,有 FastAPI、Flask 等框架
  • Rust:有 Actix-web、Rocket 等框架
  • 开发效率:Python 开发效率高,Rust 开发效率相对较低
  • 性能:Rust 性能优异,Python 性能相对较低
6.2 学习心得
  • Python 的优势:开发效率高,生态丰富
  • Rust 的优势:性能优异,内存安全
  • 相互借鉴:从 Python 学习快速开发,从 Rust 学习性能优化

七、实践项目推荐

7.1 全栈项目
  • 博客系统:使用 Python 作为后端,React/Vue 作为前端
  • 电商系统:使用 Python 作为后端,React/Vue 作为前端
  • 社交应用:使用 Python 作为后端,React/Vue 作为前端
  • 数据分析平台:使用 Python 作为后端,React/Vue 作为前端

八、学习方法和技巧

8.1 学习方法
  • 循序渐进:先学习后端 API 开发,再学习前端框架
  • 项目实践:通过实际项目来巩固知识
  • 文档阅读:仔细阅读框架的官方文档
  • 社区交流:加入社区,向他人学习
8.2 常见问题和解决方法
  • CORS 问题:配置 CORS 中间件
  • 认证问题:使用 JWT 等认证方式
  • 部署问题:使用 Docker 等容器化技术
  • 性能问题:优化 API 设计,使用缓存

九、总结

本文总结了 Python 与前端集成的关键步骤与实践建议,旨在帮助开发者快速掌握全栈开发技能。

</form>
</div>