引言
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持。它具有异步功能,这意味着它可以同时处理多个请求,从而提高效率。本文将为你提供一个快速上手 FastAPI 的教程,包括安装、基础使用、路由、依赖注入、响应模型以及一些实战示例。
安装 FastAPI
首先,你需要安装 FastAPI 和 Uvicorn。Uvicorn 是一个 ASGI 服务器,用于运行 FastAPI 应用。
pip install fastapi uvicorn
快速创建一个 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/ 来查看你的第一个 FastAPI 应用。
路由和视图函数
FastAPI 使用 Python 函数作为路由和视图。以下是一个简单的示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
在这个例子中,我们创建了一个名为 /items/{item_id} 的路由,它接受一个名为 item_id 的路径参数。
响应模型
FastAPI 允许你使用 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
在这个例子中,我们创建了一个名为 Item 的 Pydantic 模型,用于定义输入和输出。
依赖注入
FastAPI 支持依赖注入,这意味着你可以将依赖项(如数据库连接)注入到你的视图函数中。以下是一个示例:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.post("/token")
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
user = authenticate_user(username=form_data.username, password=form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token = create_access_token(data={"sub": user.username})
return {"access_token": access_token, "token_type": "bearer"}
@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
current_user = get_current_user(token=token)
return current_user
在这个例子中,我们使用 OAuth2PasswordBearer 来处理身份验证。
实战示例:创建一个简单的博客 API
以下是一个简单的博客 API 示例:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
class Blog(BaseModel):
title: str
body: str
@app.post("/blogs/")
async def create_blog(blog: Blog):
# 保存博客到数据库
# ...
return blog
@app.get("/blogs/{blog_id}")
async def read_blog(blog_id: int):
# 从数据库获取博客
# ...
return {"title": "My Blog", "body": "This is my first blog post"}
在这个例子中,我们创建了一个名为 /blogs/ 的路由,用于创建博客,以及一个名为 /blogs/{blog_id} 的路由,用于获取特定博客。
总结
通过本文,你已成功掌握了 FastAPI 的基本使用方法,包括安装、创建应用、路由、视图函数、响应模型、依赖注入以及一些实战示例。希望这些知识能帮助你快速上手 FastAPI,并开始构建自己的 API 应用。
