引言
在当今的Web开发领域,选择一个合适的框架来构建高效、易用的Web应用至关重要。FastAPI是一款由Python编写、基于标准Python类型的异步Web框架,以其高性能、易于学习和使用等特点,受到了广泛的关注。本文将带你从零开始,逐步掌握FastAPI框架,并通过实战示例,助你快速上手。
一、FastAPI基础
1.1 FastAPI简介
FastAPI是一个现代、快速(高性能)的Web框架,用于构建API,它具有以下特点:
- 基于标准Python类型提示
- 非侵入式
- 响应式(异步)
- 内置依赖注入
- 自动文档和测试
1.2 快速安装
安装FastAPI非常简单,只需使用pip命令:
pip install fastapi uvicorn
1.3 第一个FastAPI应用
创建一个名为main.py的文件,并编写以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
运行以下命令启动应用:
uvicorn main:app --reload
访问http://127.0.0.1:8000/,你会看到以下响应:
{
"Hello": "World"
}
二、路由与视图函数
2.1 路由
FastAPI使用路由来处理不同路径的请求。使用@app.get()、@app.post()等装饰器可以定义路由。
2.2 视图函数
视图函数用于处理路由的请求。以下是几个常见的视图函数:
@app.get():处理GET请求@app.post():处理POST请求@app.put():处理PUT请求@app.delete():处理DELETE请求
2.3 请求和响应
FastAPI支持自动序列化和反序列化请求和响应。以下是一个处理JSON请求和响应的示例:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
# 处理创建商品的操作
return item
三、数据验证
FastAPI内置了强大的数据验证功能。你可以使用Pydantic库来定义数据模型,并对传入的数据进行验证。
3.1 数据模型
创建一个名为models.py的文件,并定义以下数据模型:
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
description: str = None
price: float
tax: float = None
3.2 验证示例
在main.py文件中,使用Item模型验证请求参数:
@app.post("/items/")
async def create_item(item: Item):
# 处理创建商品的操作
return item
四、依赖注入
FastAPI支持依赖注入,可以方便地注入外部服务。
4.1 创建依赖项
创建一个名为dependencies.py的文件,并定义以下依赖项:
from fastapi import Depends, HTTPException
def get_db():
# 模拟数据库连接
db = []
return db
db = Depends(get_db)
4.2 在视图函数中使用依赖项
在main.py文件中,使用db依赖项:
@app.post("/items/")
async def create_item(item: Item, db: list = Depends(get_db)):
# 处理创建商品的操作
db.append(item)
return item
五、实战示例
以下是一个使用FastAPI构建的简单博客应用示例。
5.1 创建应用
创建一个名为blog的目录,并在其中创建以下文件:
main.pymodels.pydatabase.pyrouters.py
5.2 编写代码
在models.py中定义数据模型:
from pydantic import BaseModel
class Post(BaseModel):
title: str
content: str
published: bool = False
在database.py中创建数据库连接:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
在routers.py中定义路由:
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas
from .database import get_db
router = APIRouter()
@router.post("/posts/", response_model=schemas.Post)
def create_post(post: schemas.PostBase, db: Session = Depends(get_db)):
db_post = models.Post(**post.dict())
db.add(db_post)
db.commit()
db.refresh(db_post)
return db_post
在main.py中启动应用:
from fastapi import FastAPI
from routers import router
app = FastAPI()
app.include_router(router)
运行以下命令启动应用:
uvicorn main:app --reload
访问http://127.0.0.1:8000/posts/,你可以创建一个新博客文章。
六、总结
本文从FastAPI的基本概念、路由、数据验证、依赖注入等方面进行了详细介绍,并通过实战示例展示了如何使用FastAPI构建一个简单的博客应用。希望这篇文章能帮助你快速上手FastAPI框架,并构建出高效、易用的Web应用。
