FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 中的标准库支持。它没有外部依赖,使用 Python 标准库中的 starlette 和 uvicorn。FastAPI 的设计灵感来源于 Google 的 Tornado、Sanic、Aiohttp、Pyramid、Flask、Django、Tornado、Sanic、Aiohttp、Pyramid、Flask、Django、Tornado、Sanic、Aiohttp、Pyramid、Flask、Django 等。
本文将带你从零开始,一步步掌握 FastAPI 框架,并学习高效 Python 后端开发技巧。
FastAPI 简介
FastAPI 是一个高性能的 Web 框架,它使用 Python 标准库中的 starlette 和 uvicorn。以下是 FastAPI 的几个特点:
- 异步:FastAPI 使用异步编程,可以在单个线程中处理多个请求,从而提高性能。
- 类型安全:FastAPI 使用 Python 类型提示来定义请求和响应,确保数据的正确性和一致性。
- 自动文档:FastAPI 自动生成 API 文档,方便开发者查看和使用。
- 易于扩展:FastAPI 提供了许多扩展点,可以方便地添加新的功能。
安装 FastAPI
首先,确保你的 Python 版本为 3.6 或更高。然后,使用以下命令安装 FastAPI:
pip install fastapi uvicorn
快速开始
接下来,我们将创建一个简单的 FastAPI 应用程序。首先,创建一个名为 main.py 的 Python 文件,并添加以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
这段代码创建了一个 FastAPI 应用程序,并定义了一个路由,当访问根路径时,将返回 “Hello World”。
要运行此应用程序,使用以下命令:
uvicorn main:app --reload
这将在本地启动一个 Web 服务器,并自动重新加载应用程序。
路由和视图
FastAPI 使用路由和视图来定义应用程序的功能。以下是路由和视图的示例:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id == 404:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
在这个例子中,我们定义了一个路由 /items/{item_id},它接受一个名为 item_id 的路径参数。如果 item_id 等于 404,则返回一个 404 错误。
请求和响应
FastAPI 使用 Python 类型提示来定义请求和响应。以下是请求和响应的示例:
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
@app.post("/items/")
async def create_item(item: Item):
return item
在这个例子中,我们定义了一个 Pydantic 模型 Item,它包含两个字段:id 和 name。然后,我们定义了一个 POST 路由 /items/,它接受一个 Item 对象作为请求体,并返回该对象。
数据库
FastAPI 可以与各种数据库集成,例如 SQLite、PostgreSQL、MySQL 等。以下是一个使用 SQLite 数据库的示例:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional
import sqlite3
app = FastAPI()
# 创建数据库连接
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
# 创建表
cursor.execute("CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY, name TEXT)")
class Item(BaseModel):
id: Optional[int] = None
name: str
@app.post("/items/")
async def create_item(item: Item):
cursor.execute("INSERT INTO items (name) VALUES (?)", (item.name,))
conn.commit()
return {"id": cursor.lastrowid, "name": item.name}
@app.get("/items/{item_id}")
async def read_item(item_id: int):
cursor.execute("SELECT * FROM items WHERE id = ?", (item_id,))
item = cursor.fetchone()
if not item:
raise HTTPException(status_code=404, detail="Item not found")
return {"id": item[0], "name": item[1]}
在这个例子中,我们使用 SQLite 数据库存储项目数据。我们创建了一个名为 items 的表,并定义了两个路由:/items/(用于创建项目)和 /items/{item_id}(用于读取项目)。
总结
本文介绍了 FastAPI 框架,并展示了如何创建一个简单的 FastAPI 应用程序。我们学习了路由、视图、请求和响应、数据库等方面的知识。希望这篇文章能帮助你快速入门 FastAPI,并掌握高效 Python 后端开发技巧。
