PythonWeb框架:FastAPI

FastAPI 简介

FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它基于 Starlette 和 Pydantic,支持异步请求处理,并自动生成 OpenAPI 和 JSON Schema 文档。FastAPI 以其高性能和易用性迅速成为 Python 生态中流行的框架之一。


安装 FastAPI

安装 FastAPI 及其依赖库 Uvicorn(ASGI 服务器):

pip install fastapi uvicorn


创建第一个 FastAPI 应用

以下是一个简单的 FastAPI 应用示例,包含一个根路由和一个返回 JSON 数据的路由:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

运行应用:

uvicorn main:app --reload

访问 http://127.0.0.1:8000 可看到返回的 JSON 数据。


路径参数与查询参数

FastAPI 支持路径参数和查询参数,以下示例展示两者用法:

from fastapi import FastAPI

app = FastAPI()

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

访问 http://127.0.0.1:8000/items/42?q=test 将返回:

{"item_id": 42, "q": "test"}


请求体与 Pydantic 模型

FastAPI 使用 Pydantic 模型验证请求体数据。以下示例定义了一个 Item 模型并用于 POST 请求:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

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

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

发送 POST 请求时,FastAPI 会自动验证请求体是否符合 Item 模型的字段类型。


异步支持

FastAPI 原生支持异步请求处理。以下示例展示了异步数据库查询:

from fastapi import FastAPI
import asyncpg

app = FastAPI()

async def get_db_connection():
    return await asyncpg.connect("postgresql://user:password@localhost/db")

@app.get("/data")
async def fetch_data():
    conn = await get_db_connection()
    result = await conn.fetch("SELECT * FROM table")
    await conn.close()
    return {"data": result}


自动生成 API 文档

FastAPI 自动生成交互式 API 文档:

  • Swagger UI:http://127.0.0.1:8000/docs
  • ReDoc:http://127.0.0.1:8000/redoc

文档基于 OpenAPI 标准,包含请求示例和响应模型。


依赖注入

FastAPI 的依赖注入系统可用于复用逻辑(如认证、数据库连接):

from fastapi import FastAPI, Depends

app = FastAPI()

def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
    return commons


中间件与 CORS

添加中间件(如 CORS 支持):

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)


部署 FastAPI

使用 Uvicorn 或 Gunicorn 部署 FastAPI 应用:

uvicorn main:app --host 0.0.0.0 --port 8000

生产环境推荐搭配 Gunicorn:

gunicorn -k uvicorn.workers.UvicornWorker main:app


总结

FastAPI 结合了高性能、易用性和现代 Python 特性(如类型注解和异步支持),适合构建从简单到复杂的 API。其自动生成的文档和强大的数据验证功能进一步提升了开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值