说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
FastAPI 是一个现代、快速(高性能)、基于标准 Python 类型提示的 Web 框架,专为构建 API 设计。它的目标是帮助开发者高效地构建高性能的 Web 应用,同时保持代码的简洁性和易维护性。
FastAPI 是一个功能强大且易于使用的框架,适合构建高性能的 API。它利用 Python 的类型提示和异步功能,使得代码更加简洁和高效。通过自动生成文档和数据验证,极大地提高了开发效率和代码的可靠性。
首先,需要安装 FastAPI 和用于运行服务器的 Uvicorn。
pip install fastapi
pip install "uvicorn[standard]"
创建一个名为 main.py 的文件,内容如下:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
使用 Uvicorn 运行服务器:
uvicorn main:app --reload
此命令将启动开发服务器,并在代码更改时自动重新加载。默认情况下,服务器将运行在 http://127.0.0.1:8000/
。
启动服务器后,可以通过以下 URL 访问自动生成的 API 文档:
可以定义请求体模型来接收和验证请求数据。以下示例展示了如何定义和使用 Pydantic 模型:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
FastAPI 允许你通过路径参数和查询参数来处理 URL 中的动态部分:
@app.get("/users/{user_id}")
async def read_user(user_id: int, query: str = None):
return {"user_id": user_id, "query": query}
FastAPI 提供了一个简单且功能强大的依赖注入系统,可以用来管理资源、配置和其他依赖项:
from fastapi import Depends
def get_db():
db = "database_connection"
try:
yield db
finally:
db = None
@app.get("/items/")
async def read_items(db: str = Depends(get_db)):
return {"db": db}
可以添加中间件来处理请求和响应:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
FastAPI 支持 Python 的异步编程,可以在请求处理函数中使用 async 和 await:
@app.get("/async")
async def async_endpoint():
await some_async_function()
return {"message": "This is an async endpoint"}
可以使用 Pydantic 模型来定义响应模型,从而自动生成 API 文档并验证响应数据:
class User(BaseModel):
id: int
name: str
email: str
@app.get("/users/{user_id}", response_model=User)
async def read_user(user_id: int):
user = get_user_from_db(user_id)
return user
FastAPI 支持处理文件上传,通过 File 和 UploadFile 可以接收上传的文件:
from fastapi import File, UploadFile
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
可以使用 BackgroundTasks 来运行后台任务:
from fastapi import BackgroundTasks
def write_log(message: str):
with open("log.txt", mode="a") as log:
log.write(message)
@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, f"Notification sent to {email}")
return {"message": "Notification sent"}
可以使用 Docker 来部署 FastAPI 应用:
创建 Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8
COPY ./app /app
构建并运行 Docker 镜像:
docker build -t myapp .
docker run -d --name mycontainer -p 80:80 myapp
可以使用 Gunicorn 和 Uvicorn 部署 FastAPI 应用:
pip install gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
FastAPI 是一个功能强大且易于使用的框架,适合构建高性能的 API。它利用 Python 的类型提示和异步功能,使得代码更加简洁和高效。通过自动生成文档和数据验证,极大地提高了开发效率和代码的可靠性。
更新时间:2024-07-08 21:31:54 标签:python fastapi web 框架