FastAPI 是一个用于构建 Python API 的现代、快速的 Web 框架。它因其速度快、易用性强以及强大的功能而日益流行。本文旨在提供一个快速指南,来展示如何有效地利用 FastAPI 进行 Python 项目开发。
FastAPI 简介
FastAPI 是一个允许快速开发 API 的 Python 框架。它基于 Starlette(用于 Web 部分)和 Pydantic(用于数据部分)构建,结合了这两者的优点。其关键特性包括:
- 快速性能:与 NodeJS 和 Go 类似,得益于 Starlette 和 Pydantic。
- 快速代码开发:通过自动请求验证和序列化减少代码重复。
- 类型检查:广泛使用 Python 类型提示,确保代码无误并支持编辑器。
- 异步支持:轻松实现异步代码,提高性能。
设置您的环境
在开始编码之前,您需要设置环境:
- 安装 Python(3.6 版或更高版本)。
- 使用 pip 安装 FastAPI:pip install fastapi。
- 安装一个 ASGI 服务器,如 Uvicorn:pip install uvicorn。
构建一个简单的 API
我们从创建一个处理 HTTP GET 请求的基本 API 开始。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
要运行此应用,请使用 uvicorn main:app --reload,其中 main 是您的 Python 文件的名称。
创建数据模型
FastAPI 使用 Pydantic 进行数据验证。按如下方式定义模型:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
构建 POST Endpoint
为了接收数据,创建一个 POST Endpoint:
@app.post("/items/")
def create_item(item: Item):
return item
这将自动验证和序列化输入数据。
构建一个完整的小型项目
在这一部分,我们将创建一个涵盖 CRUD(创建、读取、更新、删除)操作的小型 FastAPI 项目。
- 项目结构
- main.py:主应用文件。
- models.py:包含 Pydantic 模型。
- 代码
models.py
from pydantic import BaseModel
from typing import Optional
class User(BaseModel):
id: int
name: str
email: str
is_active: Optional[bool] = True
main.py
from fastapi import FastAPI, HTTPException
from models import User
from typing import Dict
app = FastAPI()
users: Dict[int, User] = {}
@app.post("/user/", response_model=User)
def create_user(user: User):
if user.id in users:
raise HTTPException(status_code=400, detail="User already exists")
users[user.id] = user
return user
@app.get("/user/{user_id}", response_model=User)
def read_user(user_id: int):
if user_id not in users:
raise HTTPException(status_code=404, detail="User not found")
return users[user_id]
@app.put("/user/{user_id}", response_model=User)
def update_user(user_id: int, user: User):
if user_id not in users:
raise HTTPException(status_code=404, detail="User not found")
users[user_id] = user
return user
@app.delete("/user/{user_id}", response_model=User)
def delete_user(user_id: int):
if user_id not in users:
raise HTTPException(status_code=404, detail="User not found")
del users[user_id]
return {"detail": "User deleted"}
这段代码为管理用户提供了一个简单的 RESTful API。它使用内存中的字典来存储用户数据,提供了创建、读取、更新和删除用户的Endpoint。
结语
FastAPI 是在 Python 中构建高效和有效 API 的绝佳选择。其速度、简易性和强大的功能集使其适用于广泛的应用程序。相信通过遵循本教程,您已经获得了开始构建自己的 FastAPI 项目的基础知识。