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

【Python】FastApi

一,概述

有时候,开发一个简单的后端应用,使用Spring显得太冗余、臃肿,这个时候FastAPI便是首选。

FastAPI 是一个现代化的高性能 Python Web 框架,专门用于构建 API(应用程序编程接口)。它基于 Python 3.7+ 的类型提示(Type Hints)特性,结合了 Starlette(用于 Web 处理)和 Pydantic(用于数据验证)两大组件。

核心特点

  1. 极高性能

    • 与 NodeJS 和 Go 相当的性能

    • 得益于 Starlette 和 Pydantic 的底层优化

  2. 快速开发

    • 自动生成交互式 API 文档(Swagger UI 和 ReDoc)

    • 智能编辑器支持,减少调试时间

  3. 类型安全

    • 基于 Python 类型提示

    • 在编码时即可捕获许多错误

  4. 异步支持

    • 原生支持 async/await

    • 适合 I/O 密集型应用

主要功能

  • 请求参数自动验证

  • 依赖注入系统

  • 安全与认证(OAuth2、JWT等)

  • WebSocket 支持

  • GraphQL 集成

  • 测试客户端

二,实例

from typing import Listfrom fastapi import FastAPI, Query, Header, Cookie, Requestfrom pydantic import BaseModelfrom route1 import route_apiclass Body(BaseModel):name: strsize: intdef __str__(self):return f"name={self.name},size={self.size}"# 创建应用实例
app = FastAPI()
# 导入模块路由
app.include_router(route_api)# 定义路由
@app.get("/")
async def read_root():return {"message": "欢迎使用 FastAPI"}"""
路径参数实例
"""@app.get("/items/{item_id}")
async def read_item(item_id: int | None, q: str | None = None):return {f"item_id={item_id} q={q}"}"""
查询参数
"""@app.get("/query/q1")
async def read_root(q: str = None):return {"message": f"q={q}"}@app.get("/query/q2")
async def read_root(q: str = Query(None, max_length=50, pattern=r'^\d+$')):return {"message": f"q={q}"}@app.get("/query/q3")
async def read_root(q: List[str] = Query(None, max_length=50)):# 多参数使用,如列表 http://127.0.0.1:8000/query/q3?q=123123&q=1231return {"message": f"q={q}"}"""Post相关"""@app.post("/post1", response_model=Body)
async def post_item(body: Body):print(body)return body"""添加Header头"""@app.get("/head")
async def read_root(q: List[str] = Query(None, max_length=50), user_agent: str = Header(None)):# 多参数使用,如列表 http://127.0.0.1:8080/query/q3?q=123123&q=1231return {"message": f"q={q} User-Agent=f{user_agent}"}"""获得Request"""@app.get("/request")
async def read_request(request: Request):"""此处便可以通过request获得Request对象"""return {"request": f"{request.method}"}if __name__ == '__main__':"""等效命令:reload是热部署,开发阶段直接修改代码生效uvicorn main:app --reload"""import uvicornuvicorn.run("main:app", port=8080, reload=True)

如果涉及多模块,则可使用Route

"""
路由的意义,在于大项目时,模块划分,而非单独只使用FastApi在一个文件中导致臃肿"""from fastapi import APIRouterroute_api = APIRouter()@route_api.get("/r1/get1")
async def get1():return {"method": "hello from route"}@route_api.get("/r1/get2")
async def get2(q: str | None = None):return {"method": f"hello {q} from route"}

可以直接在host后加docs路径,即可自动化生成api说明,如http://127.0.0.1:8080/docs,

http://www.xdnf.cn/news/1092169.html

相关文章:

  • 腾讯云COS,阿里云OSS对象存储服务-删除操作的响应码204
  • S7-1500——(一)西门子PLC编程从入门到精通4、SCL间接寻址
  • 项目进度受制于资源分配,如何动态调配资源
  • LeetCode 138题解 | 随机链表的复制
  • 5202年安装TensorFlow纪实
  • 向量空间 线性代数
  • 解锁HTML5页面生命周期API:前端开发的新视角
  • 超越公有云:在裸金属服务器上构建低成本、高性能的静态资源服务
  • STM32 使用HAL库获取us时间
  • 【使用Flask基于PaddleOCR3.0开发一个接口 调用时报错RuntimeError: std::exception】
  • HCIP(综合实验)
  • 代码随想录总结
  • css 设置 input 插入光标样式
  • 20250709: WSL+Pycharm 搭建 Python 开发环境
  • C++11 future、promise实现原理
  • 基于Matlab多特征融合的可视化指纹识别系统
  • 微算法科技从量子比特到多级系统,Qudits技术革新引领量子计算新时代
  • 三、Docker常用命令
  • React、Vue、Angular的性能优化与源码解析概述
  • upload-labs靶场通关详解:第19关 条件竞争(二)
  • Mysql组合索引的update在多种情况下的间隙锁的范围(简单来说)
  • 嵌入式调试LOG日志输出(以STM32为例)
  • 自建ELK vs 云商日志服务:成本对比分析
  • [Backlog] Git操作 | 任务数据结构 | Markdown 处理
  • Hugging Face Agents Course unit1笔记
  • 【科研绘图系列】R语言绘制解剖图
  • 解锁DevOps潜力:如何选择合适的CI/CD工作流工具
  • 【RK3568+PG2L50H开发板实验例程】FPGA部分 | 键控LED实验
  • 闲庭信步使用图像验证平台加速FPGA的开发:第六课——测试图案的FPGA实现
  • 01-elasticsearch-搭个简单的window服务-ik分词器-简单使用