Python FastAPI 实战应用指南

文章目录

    • [1. 前言](#1. 前言)
    • [2. FastAPI 的优势](#2. FastAPI 的优势)
    • [3. FastAPI 快速入门](#3. FastAPI 快速入门)
      • [3.1 安装](#3.1 安装)
      • [3.2 最简单的 API 案例](#3.2 最简单的 API 案例)
    • [4. 基础功能应用](#4. 基础功能应用)
      • [4.1 模型验证和参数校验](#4.1 模型验证和参数校验)
      • [4.2 实现高级计划:用于实时功能和快速发布](#4.2 实现高级计划:用于实时功能和快速发布)
    • [5. 高级应用](#5. 高级应用)
      • [5.1 实现 OAuth2 认证](#5.1 实现 OAuth2 认证)
      • [5.2 提供 WebSocket 支持](#5.2 提供 WebSocket 支持)
    • [6. 总结](#6. 总结)

1. 前言

FastAPI 是一个进一步提升 Python Web 开发效率和性能的框架,具有高性能,易于使用,并提供一次性文档。本文将通过一些实战案例来认识 FastAPI 的基本功能和高级应用。

2. FastAPI 的优势

  1. 带有完善的自动文档生成:根据模型定义,自动生成丰富的 API 文档,兼存 Swagger UI 和 ReDoc。
  2. 高效性:基于 Starlette 和 Pydantic ,提供优秀性能和数据校验。
  3. 完善的支持性:支持 WebSocket,GraphQL,OAuth2。
  4. 最新高级功能:完全保持 Python 代码的高级引擎和控制。

3. FastAPI 快速入门

3.1 安装

确保已安装 Python 3.7+:

bash 复制代码
pip install fastapi uvicorn

注:Uvicorn 是一个高性能的 ASGI 引擎,用于运行 FastAPI 应用。

3.2 最简单的 API 案例

创建文件 main.py

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "欢迎使用 FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

启动服务器:

bash 复制代码
uvicorn main:app --reload

访问 http://127.0.0.1:8000 和 Swagger UI:http://127.0.0.1:8000/docs


4. 基础功能应用

4.1 模型验证和参数校验

使用 Pydantic 模型来校验数据:

python 复制代码
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

提供备选参数,进行文档化。

4.2 实现高级计划:用于实时功能和快速发布

这里例如使用 BackgroundTasks:

python 复制代码
from fastapi import BackgroundTasks

def write_log(message: str):
    with open("log.txt", "a") as log:
        log.write(message + "\n")

@app.post("/log/")
def log_message(message: str, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, message)
    return {"message": "Log recorded!"}

5. 高级应用

5.1 实现 OAuth2 认证

FastAPI 支持 OAuth2 和 JWT:

python 复制代码
from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/users/me")
def read_users_me(token: str = Depends(oauth2_scheme)):
    return {"token": token}

5.2 提供 WebSocket 支持

python 复制代码
from fastapi import WebSocket

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Message text was: {data}")

6. 总结

FastAPI 是完善的选择,适合构建低带宽、高性能的 API。通过本文中的案例,希望你能够快速上手并创建自己的实现。

相关推荐
u0109147601 分钟前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_381288185 分钟前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
maqr_11026 分钟前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python
程序猿编码38 分钟前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
sg_knight43 分钟前
设计模式实战:责任链模式(Chain of Responsibility)
python·设计模式·责任链模式
2301_803875611 小时前
如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
jvm·数据库·python
aq55356001 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
学弟1 小时前
【内涵】深度学习中的三种变量及pytorch中对应的三种tensor
人工智能·pytorch·python
2301_777599371 小时前
mysql如何进行数据库容量规划_评估磁盘空间增长趋势
jvm·数据库·python
aq55356002 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php