当前位置: 首页 > news >正文

参考thinkphp架构的FastAPI实现思路

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.7+ 并使用了类型提示。虽然 FastAPI 和 ThinkPHP 的设计理念和语言不同,但 FastAPI 同样可以实现 ThinkPHP 的核心功能,如路由、模型、视图、中间件、JWT、Session 等。以下是如何用 FastAPI 实现这些功能的详细说明:


一、路由(Route)

FastAPI 实现
FastAPI 使用装饰器定义路由,支持 HTTP 方法(GET、POST 等)和路径参数、查询参数。

from fastapi import FastAPI

app = FastAPI()

@app.get("/user/{user_id}")
async def read_user(user_id: int):
    return {"user_id": user_id}

 

对比 ThinkPHP

  • ThinkPHP:通过 Route::get() 定义路由。
  • FastAPI:使用 @app.get() 装饰器定义路由。

二、中间件(Middleware)

FastAPI 实现
FastAPI 支持全局中间件,用于在请求处理前后执行逻辑(如日志记录、权限校验)。

from fastapi import Request

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    response = await call_next(request)
    response.headers["X-Custom-Header"] = "FastAPI"
    return response

 

对比 ThinkPHP

  • ThinkPHP:通过 middleware() 方法绑定中间件。
  • FastAPI:使用 @app.middleware() 装饰器注册中间件。

三、控制器(Controller)

FastAPI 实现
FastAPI 的路由函数相当于控制器方法,负责处理请求和返回响应。

@app.post("/user/")
async def create_user(user: User):
    return {"user": user}

 

对比 ThinkPHP

  • ThinkPHP:控制器类中的方法处理请求。
  • FastAPI:路由函数直接处理请求。

四、模型(Model)

FastAPI 实现
FastAPI 使用 Pydantic 模型定义数据结构,支持数据验证和文档生成。

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str

@app.post("/user/")
async def create_user(user: User):
    return user

 

对比 ThinkPHP

  • ThinkPHP:通过模型类封装数据库操作。
  • FastAPI:使用 Pydantic 模型定义数据结构,数据库操作通常结合 ORM(如 SQLAlchemy)实现。

五、视图(View)

FastAPI 实现
FastAPI 主要用于构建 API,但也可以返回 HTML 或模板渲染的视图(如 Jinja2)。

from fastapi.responses import HTMLResponse

@app.get("/", response_class=HTMLResponse)
async def read_root():
    return "<h1>Hello, FastAPI!</h1>"

 

对比 ThinkPHP

  • ThinkPHP:通过视图模板渲染 HTML。
  • FastAPI:可以返回 HTML 或使用模板引擎(如 Jinja2)。

六、JWT(JSON Web Token)

FastAPI 实现
FastAPI 支持 JWT 认证,通常结合 OAuth2PasswordBearerPyJWT 实现。

from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
import jwt

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

async def get_current_user(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, "SECRET_KEY", algorithms=["HS256"])
        return payload
    except jwt.PyJWTError:
        raise HTTPException(status_code=401, detail="Invalid token")

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

 

对比 ThinkPHP

  • ThinkPHP:通过 JWT 库生成和验证 Token。
  • FastAPI:使用 PyJWTOAuth2PasswordBearer 实现 JWT 认证。

七、Session 和 Cookie

FastAPI 实现
FastAPI 支持 Session 和 Cookie 操作,通常通过 RequestResponse 对象实现。

from fastapi import Request, Response

@app.post("/login/")
async def login(request: Request, response: Response):
    response.set_cookie(key="session_id", value="12345")
    return {"message": "Logged in"}

@app.get("/session/")
async def read_session(session_id: str = Cookie(None)):
    return {"session_id": session_id}

 

对比 ThinkPHP

  • ThinkPHP:通过 SessionCookie 类操作。
  • FastAPI:通过 RequestResponse 对象操作。

八、数据库操作(ORM)

FastAPI 实现
FastAPI 通常结合 SQLAlchemy 或 Tortoise ORM 实现数据库操作。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, bind=engine)
Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)

@app.post("/user/")
async def create_user(name: str):
    db = SessionLocal()
    user = User(name=name)
    db.add(user)
    db.commit()
    return user

 

对比 ThinkPHP

  • ThinkPHP:通过模型类封装数据库操作。
  • FastAPI:结合 SQLAlchemy 或 Tortoise ORM 实现数据库操作。

九、模块化设计

FastAPI 实现
FastAPI 支持 APIRouter 实现模块化设计,将路由分组管理。

from fastapi import APIRouter

router = APIRouter()

@router.get("/items/")
async def read_items():
    return [{"item": "Foo"}]

app.include_router(router, prefix="/api")

 

对比 ThinkPHP

  • ThinkPHP:通过多模块设计(如 adminapi 模块)。
  • FastAPI:使用 APIRouter 实现模块化。

十、性能优化

FastAPI 实现
FastAPI 天生高性能,支持异步编程,可结合缓存(如 Redis)和任务队列(如 Celery)进一步优化。

from fastapi import BackgroundTasks

def send_email(email: str):
    # 模拟发送邮件
    pass

@app.post("/send-email/")
async def send_email_background(background_tasks: BackgroundTasks, email: str):
    background_tasks.add_task(send_email, email)
    return {"message": "Email sent in background"}

 

对比 ThinkPHP

  • ThinkPHP:通过缓存中间件和任务队列优化性能。
  • FastAPI:支持异步编程和任务队列。

总结

通过以上实现,FastAPI 可以完全覆盖 ThinkPHP 的核心功能,同时利用其异步编程和高性能特性,构建现代化的 Web 应用和 API。以下是功能对比表:

功能

ThinkPHP 实现方式

FastAPI 实现方式

路由

Route::get()

@app.get()

中间件

middleware()

@app.middleware()

控制器

控制器类方法

路由函数

模型

模型类 + ORM

Pydantic 模型 + SQLAlchemy

视图

视图模板

HTMLResponse 或 Jinja2

JWT

JWT

PyJWT + OAuth2PasswordBearer

Session/Cookie

Session

RequestResponse 对象

数据库

模型类 + 查询构造器

SQLAlchemy 或 Tortoise ORM

模块化

多模块设计

APIRouter

性能优化

缓存中间件 + 任务队列

异步编程 + Celery

通过 FastAPI,开发者可以构建高性能、现代化的 Web 应用,同时享受 Python 生态的强大支持。

(ps.文章由DS辅助撰写)

相关文章:

  • 【AI大模型】LLM训练deepseek如何识别视频
  • 基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析
  • leetcode-数组操作
  • LeetCode - #226 基于 Swift 实现基本计算器
  • 浙江大学:《DeepSeek——回望AI三大主义与加强通识教育》
  • 【每日学点HarmonyOS Next知识】对话框与导航冲突、富文本、字体大小、列表刷新、Scroll包裹文本
  • ROWNUM 与 ROW_NUMBER() OVER ()
  • llamafactory 微调教程
  • Python---函数
  • for...of的用法与介绍
  • 设计模式八股整理
  • 小白学习:提示工程(什么是prompt)
  • 计算机网络基础:简单渗透
  • sql语句分页的关键字是?
  • 【Linux】线程池
  • 解锁 Ryu API:从 Python 接口到 REST 设计全解析
  • Markdown 语法入门指南(VSCode 版)
  • NVSHMEM介绍、InfiniBand GPUDirect、和NVshmem使用案例说明
  • Scala编程_数组、列表、元组、集合与映射
  • GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)
  • 娃哈哈:调整产销布局致部分工厂停工,布局新产线可实现自主生产,不排除推新品牌
  • 科普|男性这个器官晚到岗,可能影响生育能力
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 费高云不再担任安徽省人民政府副省长
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目
  • 经济日报整版聚焦:上海构建法治化营商环境,交出高分答卷