FastAPI 安装使用教程
一、FastAPI 简介
FastAPI 是一个现代、快速(高性能)的 Web 框架,基于 Python 3.7+ 和标准类型提示构建,广泛应用于 API 服务开发。它使用 Pydantic 进行数据验证,集成自动生成 OpenAPI 和文档 UI,非常适合构建高性能的 Web 服务与微服务架构。
二、环境准备
2.1 安装 Python 3.7+
FastAPI 要求 Python >= 3.7,可以通过以下命令验证:
python --version
# 或
python3 --version
2.2 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
三、安装 FastAPI 与 Uvicorn
使用 pip 安装:
pip install fastapi
pip install "uvicorn[standard]"
其中,Uvicorn 是 FastAPI 推荐的高性能 ASGI 服务器。
四、第一个 FastAPI 示例
创建 main.py
文件:
from fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"message": "Hello, FastAPI!"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):return {"item_id": item_id, "q": q}
五、运行项目
在终端中运行:
uvicorn main:app --reload
访问:
- 接口地址:http://127.0.0.1:8000
- Swagger UI:http://127.0.0.1:8000/docs
- Redoc 文档:http://127.0.0.1:8000/redoc
六、FastAPI 常用特性
6.1 路由参数与类型校验
@app.get("/user/{user_id}")
def get_user(user_id: int):return {"user_id": user_id}
6.2 请求体参数(使用 Pydantic)
from pydantic import BaseModelclass Item(BaseModel):name: strprice: float@app.post("/items/")
def create_item(item: Item):return item
6.3 异步支持
@app.get("/async")
async def async_endpoint():return {"message": "This is async"}
七、项目结构推荐
app/
├── main.py
├── routers/
│ └── user.py
├── models/
├── schemas/
├── services/
└── utils/
八、使用依赖注入(Depends)
from fastapi import Dependsdef common_params(q: str = None):return {"q": q}@app.get("/search/")
def search(params: dict = Depends(common_params)):return params
九、部署建议
- 使用 Uvicorn + Gunicorn 或 Hypercorn 部署
- 推荐部署在 Linux + Nginx 上
- 可通过 Docker 容器化部署
十、常见问题
Q1: Swagger 页面打不开?
检查是否运行时未指定 --reload
或检查路径 /docs
是否拼写正确。
Q2: 中文乱码?
设置响应编码:
from fastapi.responses import JSONResponse@app.get("/zh")
def read_zh():return JSONResponse(content={"message": "你好,FastAPI!"}, media_type="application/json; charset=utf-8")
十一、学习资源推荐
- FastAPI 官方文档
- FastAPI 中文文档
- Pydantic 官方文档
- [实战视频教程 Bilibili 搜索 FastAPI]
本文由“小奇Java面试”原创发布,转载请注明出处。
可以搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。