5.6 全局依赖与路径操作依赖
FastAPI入门教程:Python初学者快速上手指南
这篇FastAPI入门教程专为有Python基础的初学者设计,通过生活化类比和动手实践,快速掌握FastAPI核心概念,包括全局依赖与路径操作依赖,建立Web开发信心。
FastAPI入门教程:Python初学者快速上手指南
介绍
嗨!欢迎来到FastAPI的世界!如果你已经掌握了Python的基础语法,但从未接触过Web开发,别担心,FastAPI将是你完美的入门选择。FastAPI是一个现代、快速(高性能)的Python Web框架,用于构建API。它就像你第一次学骑自行车,有辅助轮一样——简单易上手,却功能强大。
在本教程中,我们会通过大量简单示例,让你一步步体验“成功时刻”,用类比来理解抽象概念,最终自信地构建自己的Web应用。
为什么选择FastAPI?
想象一下,你开了一家餐厅(你的Web应用)。顾客(客户端)通过菜单(API)点餐,厨房(后端服务器)准备食物并上菜。FastAPI就是这个高效的厨房系统,它能自动生成菜单文档,处理订单飞快,并且易于维护。对于初学者来说,它语法简洁,文档清晰,让你专注于学习而非复杂的配置。
安装FastAPI
首先,确保你安装了Python(建议3.7以上版本)。打开命令行(终端),运行以下命令来安装FastAPI和服务器工具:
pip install fastapi uvicorn
安装完成了吗?太棒了!第一个“成功时刻”达成。
你的第一个FastAPI应用
让我们创建一个最简单的FastAPI应用,看看它如何工作。新建一个Python文件,比如main.py,并输入以下代码:
from fastapi import FastAPI
app = FastAPI() # 创建FastAPI应用,就像给你的餐厅起名
@app.get("/") # 定义一个路径操作:当有人访问首页时
async def read_root():
return {"message": "Hello, World!"} # 返回一个JSON响应
保存文件。然后在命令行中运行:
uvicorn main:app --reload
打开浏览器,访问 http://127.0.0.1:8000/,你会看到 {"message": "Hello, World!"}。哇,你的第一个API运行起来了!这是一个简单的路径操作,它处理GET请求。路径操作就像餐厅的点单流程:顾客访问某个URL(路径),服务器响应相应内容。
理解路径操作:类比餐厅点单
在FastAPI中,路径操作是用来定义当客户端(如浏览器或另一个应用)请求特定URL时,服务器应该做什么。
- 路径:如
/items/1,就像餐厅的菜单项“汉堡”。 - 操作:GET、POST、PUT、DELETE,对应顾客的点餐(获取菜单)、下单(添加新订单)、修改订单、取消订单。
让我们扩展例子,添加一个路径操作来获取项目列表:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
@app.get("/items/")
async def read_items():
return [{"item": "Book"}, {"item": "Pen"}] # 返回一个项目列表
运行应用,访问 http://127.0.0.1:8000/items/,你会看到列表。是不是很简单?现在你正在处理多个路径操作。
依赖注入:让代码更整洁
依赖注入是FastAPI的一个强大功能,它帮助你管理代码中的重复部分。想象一下,你在餐厅每次做菜都需要去仓库拿盐,这很麻烦。依赖注入就像是让厨房助手自动准备好配料,你只需专注于烹饪。
在FastAPI中,依赖分为全局依赖和路径操作依赖:
- 全局依赖:应用于整个应用,比如验证所有请求的认证信息。
- 路径操作依赖:只应用于特定的路径操作,比如为某个菜单项添加特殊调料。
示例:路径操作依赖
假设我们想为某些路径操作添加一个“欢迎消息”依赖。创建一个依赖函数:
from fastapi import FastAPI, Depends
app = FastAPI()
async def common_parameters(q: str = None, skip: int = 0, limit: int = 10):
return {"q": q, "skip": skip, "limit": limit} # 这个函数返回一些通用参数
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
# 使用依赖:common_parameters 自动被调用并提供参数
return {"items": ["item1", "item2"], "params": commons}
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return {"users": ["user1", "user2"], "params": commons}
访问 http://127.0.0.1:8000/items/?q=test&skip=5,你会看到参数被正确处理。依赖注入让代码可重用且易于维护。
示例:全局依赖
要添加全局依赖,比如验证每个请求的用户,我们可以这样做:
from fastapi import FastAPI, Depends, Header, HTTPException
async def verify_token(x_token: str = Header(None)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="Invalid token")
return x_token
app = FastAPI(dependencies=[Depends(verify_token)]) # 将依赖添加到全局
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
现在,每个请求都需要在头部包含 X-Token: fake-super-secret-token,否则会返回错误。运行应用并测试:不带token访问会失败,带上token就能成功。这展示了全局依赖如何保护整个应用。
动手实践:构建一个小型API
让我们把所学知识结合起来,创建一个简单的图书管理API。它会使用路径操作和依赖。
from fastapi import FastAPI, Depends, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
# 定义数据模型:用Pydantic来验证数据,就像餐厅的菜单标准
class Book(BaseModel):
id: int
title: str
author: str
# 模拟数据库:用一个列表存储书籍
fake_db = [
Book(id=1, title="Python入门", author="张三"),
Book(id=2, title="FastAPI指南", author="李四"),
]
# 依赖:验证书籍ID是否存在
async def get_book_by_id(book_id: int):
for book in fake_db:
if book.id == book_id:
return book
raise HTTPException(status_code=404, detail="Book not found")
# 路径操作
@app.get("/books/", response_model=List[Book])
async def read_books():
return fake_db # 获取所有书籍
@app.get("/books/{book_id}", response_model=Book)
async def read_book(book: Book = Depends(get_book_by_id)):
return book # 使用依赖来获取特定书籍
@app.post("/books/", response_model=Book)
async def create_book(book: Book):
fake_db.append(book)
return book # 创建新书籍
运行应用,你可以:
- 访问
http://127.0.0.1:8000/books/获取所有书籍列表。 - 访问
http://127.0.0.1:8000/books/1获取ID为1的书籍(依赖确保书籍存在)。 - 使用工具如curl或Postman发送POST请求到
http://127.0.0.1:8000/books/创建新书籍(需要发送JSON数据)。
试试吧!每个操作都会给你即时反馈,建立你的信心。
总结和下一步
恭喜你!你已经掌握了FastAPI的基础:创建应用、定义路径操作、使用依赖注入(包括全局和路径操作依赖)。通过类比餐厅,希望这些概念变得生动易懂。
下一步建议:
- 探索FastAPI的自动文档:访问
http://127.0.0.1:8000/docs查看交互式API文档。 - 学习更多高级功能,如数据库集成、错误处理等。
- 实践构建一个完整项目,比如待办事项API。
记住,Web开发就像学新技能——多加练习,你会越来越熟练。FastAPI社区活跃,文档丰富,随时可以寻求帮助。现在,去创造你的第一个Web应用吧!