FastAPI教程 调试
在 FastAPI 中,你可以使用标准的 Python 调试工具进行调试。以下是一些常见的调试技巧和工具:1. 使用 print 语句: 最简单的调试方法是在代码中插入 print 语句,输出一些变量的值或某些代码块的执行情况。这对于快速调试和理解代码的执行流程很有帮助。 # 在代码中插入 print 语句 def my_function(): print("Entering my_function") # ... 其他代码 ... print("Leaving my_function")2. 使用断点: 在代码中插入 pdb 模块提供的断点,使得程序在特定位置停止,你可以交互式地检查变量的值、执行代码等。 import pdb def my_function(): # 在代码中插入断点 pdb.set_trace() # ... 其他代码 ... 运行应用程序后,会在插入断点的位置启动交互式调试。3. 使用 IDE 的调试功能: 如果你使用集成开发环境(...
FastAPI教程 测试
FastAPI 提供了强大的测试工具,使你能够方便地编写和执行单元测试、集成测试和端到端测试。FastAPI 使用 TestClient 类来模拟客户端请求,使得你可以在测试中发送请求并断言预期的响应。以下是一个简单的 FastAPI 测试的示例:1. 创建一个 FastAPI 应用(main.py): # main.py from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Hello, World!"} @app.get("/items/{item_id}") def read_item(item_id: int, query_param: str = None): return {"item_id": item_id, "query_param": query_param}2....
FastAPI教程 静态文件
在 FastAPI 中,你可以使用 fastapi.staticfiles.StaticFiles 中间件来提供静态文件服务。这使得你可以轻松地为你的应用程序添加样式表、JavaScript 文件、图像等静态资源。以下是一个简单的示例,演示如何在 FastAPI 中提供静态文件服务:1. 创建一个 static 文件夹,并在其中存放你的静态文件。 例如,创建一个 static 文件夹,并在其中添加一个名为 style.css 的样式表文件。2. 使用 StaticFiles 中间件来提供静态文件服务。 from fastapi import FastAPI from fastapi.staticfiles import StaticFiles app = FastAPI() # 将静态文件服务添加到 FastAPI 应用程序 app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/&qu...
FastAPI教程 元数据和文档 URL
在 FastAPI 中,你可以使用 OpenAPI 的元数据来配置文档生成的细节,包括标题、描述、版本号等。你还可以使用 FastAPI 的 redoc_url 和 swagger_ui_oauth2_redirect_url 参数来自定义文档的 URL。以下是一个简单的例子,演示如何使用元数据和自定义文档 URL:from fastapi import FastAPIapp = FastAPI( title="My FastAPI App", description="This is a sample FastAPI application.", version="1.0.0", redoc_url="/docs", swagger_ui_oauth2_redirect_url="/docs/oauth2-redirect",)@app.get("/")async def read_root(): return {"me...
FastAPI教程 后台任务
在 FastAPI 中,你可以使用后台任务(Background Tasks)来异步执行一些任务,而不会阻塞主请求的处理。这对于需要执行一些耗时的操作,但不需要等待其完成的情况非常有用。以下是一个使用后台任务的 FastAPI 示例:from fastapi import FastAPI, BackgroundTasksapp = FastAPI()def write_log(message: str): with open("logs.txt", mode="a") as log_file: log_file.write(message)@app.post("/send-notification/{email}")async def send_notification( email: str, background_tasks: BackgroundTasks): message = f"message to {email}\n" background_tasks.a...
FastAPI教程 更大的应用 - 多个文件
在一个大型 FastAPI 应用中,为了保持代码的可维护性和结构清晰,通常将代码拆分为多个文件和模块。FastAPI 提供了一种方便的方式来组织代码,允许将路径操作、模型、依赖项等逻辑分布在多个文件中。以下是一个示例,演示如何在 FastAPI 中创建一个更大的应用,包括多个文件:1. 创建主应用文件(main.py):# main.pyfrom fastapi import FastAPIfrom routers import itemsapp = FastAPI()# 包含路径操作的路由app.include_router(items.router)2. 创建 routers 目录并在其中添加路由文件(routers/items.py):# routers/items.pyfrom fastapi import APIRouter, Depends, HTTPExceptionfrom sqlalchemy.orm import Sessionfrom database import get_dbfrom models import Itemrouter = APIRouter()...
FastAPI教程 SQL(关系)数据库
在 FastAPI 中,你可以轻松地与 SQL(关系)数据库集成,常用的数据库包括 SQLite、MySQL、PostgreSQL 等。FastAPI 推荐使用 SQLAlchemy 这个强大的 SQL 工具和对象关系映射(ORM)库,以及 Alembic 用于数据库迁移。下面是一个使用 FastAPI 和 SQLAlchemy 连接 SQLite 数据库的简单示例:首先,确保安装以下依赖:pip install fastapi uvicorn sqlalchemy databases[sqlite] alembic然后,创建一个 main.py 文件:from fastapi import FastAPI, HTTPException, Dependsfrom sqlalchemy import create_engine, Column, Integer, String, ForeignKeyfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker, ...
FastAPI教程 CORS(跨域资源共享)
跨域资源共享(CORS)是一种机制,它使用额外的 HTTP 头来告诉浏览器,哪些跨域请求是允许的。FastAPI 提供了内置的中间件 fastapi.middleware.cors.CORSMiddleware 来简化 CORS 的配置。以下是一个使用 FastAPI 中间件处理 CORS 的示例:from fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()# 添加 CORS 中间件,以处理跨域请求app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有来源 allow_credentials=True, allow_methods=["*"], # 允许所有 HTTP 方法 allow_headers=["*"], # 允许所有 HTTP 头部)# 路径操作函数@app.get("/&qu...
FastAPI教程 中间件
中间件(Middleware)是 FastAPI 中的一项强大功能,它允许你在请求到达应用程序之前或响应离开应用程序之后,执行一些通用的操作。中间件可以用于添加全局的行为,例如日志记录、身份验证、异常处理等。以下是一个简单的使用中间件的 FastAPI 示例:from fastapi import FastAPI, HTTPException, Dependsfrom fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()# 添加 CORS 中间件,以处理跨域请求app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有来源 allow_credentials=True, allow_methods=["*"], # 允许所有 HTTP 方法 allow_headers=["*"], # 允许所有 HTTP 头部)# 自定义中间件async def custo...
FastAPI教程 使用(哈希)密码和 JWT Bearer 令牌的 OAuth2
在 FastAPI 中,你可以使用 JWT(JSON Web Tokens)来实现 OAuth2 的认证机制,同时结合哈希密码。下面是一个使用哈希密码和 JWT Bearer 令牌的 OAuth2 示例:首先,你需要安装 PyJWT 库,可以通过以下命令安装:pip install PyJWT然后,你可以使用以下代码:from fastapi import FastAPI, Depends, HTTPException, statusfrom fastapi.security import OAuth2PasswordBearerfrom jose import JWTError, jwtfrom passlib.context import CryptContextapp = FastAPI()# 加密算法ALGORITHM = "HS256"# 模拟用户数据fake_users_db = { "fakeuser": { "username": "fakeuser", &...
FastAPI教程 使用密码和 Bearer 的简单 OAuth2
在 FastAPI 中,你可以使用 OAuth2PasswordBearer 类来实现一个简单的 OAuth2 认证,结合密码(用户名和密码)和 Bearer Token。以下是一个使用密码和 Bearer 的简单 OAuth2 的示例:from fastapi import FastAPI, Depends, HTTPException, statusfrom fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestFormapp = FastAPI()# OAuth2PasswordBearer 类用于处理密码和 Bearer Tokenoauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")# 模拟的用户数据fake_users_db = { "fakeuser": { "username": "fakeuser", "hashe...
FastAPI教程 获取当前用户
在 FastAPI 中,你可以通过在路径操作函数的参数中使用 Depends 来获取当前用户信息。通常,这涉及到使用身份验证机制(如 OAuth2)并使用依赖项来提取和验证用户的身份信息。以下是一个基于 OAuth2 身份验证的例子,演示如何获取当前用户:from fastapi import Depends, FastAPI, HTTPExceptionfrom fastapi.security import OAuth2PasswordBearerapp = FastAPI()# 使用 OAuth2PasswordBearer 创建 OAuth2 依赖项oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")# 模拟从数据库中获取用户信息的函数def get_current_user(token: str = Depends(oauth2_scheme)): # 在实际应用中,这里可能需要解析和验证 token,并从数据库中获取用户信息 if token != "fake-token&qu...
FastAPI教程 安全性 - 第一步
在 FastAPI 中,确保应用程序的安全性是一个重要的方面。以下是一些安全性的第一步建议:1. 输入验证: 使用 Pydantic 模型来定义请求和响应的数据结构,以及输入参数的类型。Pydantic 提供了强大的数据验证和转换功能,可以帮助防止不良输入。 from pydantic import BaseModel class Item(BaseModel): name: str description: str = None2. 路径参数和查询参数验证: 使用路径参数和查询参数时,确保对输入进行验证。FastAPI 支持在路径操作中使用参数的方式来验证输入。 from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(item_id: int, query_param: str = None): return {"item_id": item_id, &qu...
FastAPI教程 与yield的依赖关系
在 FastAPI 中,你可以使用 yield 关键字来定义异步的依赖项函数。异步依赖项函数通常用于执行异步的操作,例如异步地查询数据库或执行异步的 HTTP 请求。以下是一个使用 yield 的异步依赖项函数的示例:from fastapi import Depends, FastAPI, HTTPExceptionapp = FastAPI()# 异步依赖项函数async def get_token(): # 在实际应用中,这里可以是异步的操作,比如异步地从数据库中获取令牌 return "fake-async-token"# 路径操作@app.get("/items/")async def read_items(token: str = Depends(get_token)): return {"token": token}在这个例子中,get_token 是一个异步的依赖项函数。它使用 async def 声明,因为它可能执行异步操作。在实际应用中,这个函数可能会与数据库或其他异步服务进行交互。当你在...
FastAPI教程 全局依赖项
在 FastAPI 中,全局依赖项(Global Dependencies)是在整个应用程序中全局共享的依赖项。这些依赖项在每个请求处理之前都会被执行,无论请求是访问哪个路径操作。这提供了一种在整个应用程序中共享状态或执行全局任务的方式。以下是一个使用全局依赖项的 FastAPI 示例:from fastapi import Depends, FastAPI, HTTPExceptionapp = FastAPI()# 全局依赖项async def common_global_dependency(token: str = Depends(lambda x: x.headers.get("token"))): if token != "fake-global-token": raise HTTPException(status_code=400, detail="Invalid global token") return token# 路径操作@app.get("/items/")...
FastAPI教程 路径操作装饰器依赖项
在 FastAPI 中,路径操作装饰器(Path Operation Decorators)是用于声明和定义路径操作的工具。路径操作装饰器通常用于定义 HTTP 方法(GET、POST 等)以及它们的路径和操作。在路径操作装饰器中,你可以使用依赖项(Dependencies)来处理请求的前置条件或执行其他逻辑。以下是一个使用路径操作装饰器和依赖项的示例:from fastapi import Depends, FastAPI, HTTPExceptionapp = FastAPI()# 依赖项函数def get_query_token(token: str = Depends(lambda x: x.query_token)): if token != "fake-token": raise HTTPException(status_code=400, detail="Invalid token") return token# 路径操作装饰器和依赖项@app.get("/items/{item_id}"...
FastAPI教程 子依赖项
在 FastAPI 中,子依赖项(Sub-dependencies)是在依赖项(Dependency)中使用的依赖项。子依赖项可以帮助你更好地组织和结构化你的代码,使其更具可读性和可维护性。以下是一个简单的 FastAPI 子依赖项的示例:from fastapi import Depends, FastAPI, HTTPExceptionapp = 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)): return commons在上述例子中,common_parameters 是一个子依赖项,用于...
FastAPI教程 作为依赖的类
在FastAPI中,你可以将类作为依赖项,使得依赖项的配置更加灵活。以下是一个简单的FastAPI教程示例,演示如何将类作为依赖项:首先,确保你已经安装了FastAPI和uvicorn:pip install fastapi uvicorn然后,创建一个名为main.py的文件,输入以下代码:from fastapi import FastAPI, Dependsapp = FastAPI()# 定义一个依赖项类class CommonQueryParams: def __init__(self, token: str = None, q: str = None): self.token = token self.q = q# 使用依赖项类@app.get("/items/")async def read_items(commons: CommonQueryParams = Depends()): return {"token": commons.token, "q": commons....
FastAPI教程 依赖项 - 第一步
在FastAPI中,依赖项(Dependencies)是一种用于在路由函数运行之前执行某些操作的机制。这包括身份验证、数据验证、数据库连接等操作。以下是一个简单的FastAPI教程示例,演示如何使用依赖项。首先,确保你已经安装了FastAPI和uvicorn:pip install fastapi uvicorn然后,创建一个名为main.py的文件,输入以下代码:from fastapi import FastAPI, Dependsapp = FastAPI()# 定义一个依赖项函数def get_query_token(token: str = Depends(lambda x: x.query_params.get("token"))): return {"token": token}# 使用依赖项函数@app.get("/items/")async def read_items(commons: dict = Depends(get_query_token)): return commons在这个例子中,...
FastAPI教程 依赖项
在FastAPI中,依赖项(Dependencies)是一种用于在路由函数运行之前执行某些操作的机制。它可以用于进行身份验证、数据验证、数据库连接等操作。以下是一个简单的FastAPI教程示例,演示如何使用依赖项:首先,确保你已经安装了FastAPI和uvicorn:pip install fastapi uvicorn然后,创建一个名为main.py的文件,输入以下代码:from fastapi import FastAPI, Depends, HTTPExceptionapp = FastAPI()# 依赖项函数,用于获取用户认证信息def get_current_user(token: str = Depends(lambda x: x.headers.get("Authorization"))): if token != "fake-token": raise HTTPException(status_code=401, detail="Unauthorized") return {"...