FastAPI 表单数据
在 FastAPI 中,你可以使用表单数据处理 POST 请求中的数据。FastAPI 提供了 Form 类来处理表单数据,并将其作为函数的参数。以下是一个简单的示例,演示如何使用表单数据:from fastapi import FastAPI, Formapp = FastAPI()# 使用 Form 类来处理表单数据@app.post("/login/")def login(username: str = Form(...), password: str = Form(...)): return {"username": username, "password": password}在这个例子中,Form 类用于声明表单字段,并将其作为函数的参数。... 表示这是一个必填字段,你也可以提供默认值或其他参数来定义更多的表单字段属性。你可以使用这种方式处理表单数据,而无需手动解析请求体或使用 JSON 模型。FastAPI 会自动解析表单数据,并将其传递给相应的函数。你还可以通过设置 multipart/form-dat...
FastAPI 路径操作依赖项
在 FastAPI 中,你可以使用依赖项(Dependencies)来处理路径操作的参数。依赖项是一个函数,它在执行路径操作之前执行,可以用于获取或验证参数,执行某些逻辑,或者提供共享的资源。依赖项可以在路径操作函数的参数中声明,并在运行时由 FastAPI 处理。以下是一个使用依赖项的示例:from fastapi import FastAPI, Depends, HTTPExceptionapp = FastAPI()# 定义一个依赖项函数def get_query_parameter(q: str = None): return q# 使用依赖项作为参数@app.get("/items/")def read_item(q: str = Depends(get_query_parameter)): return {"q": q}在这个例子中,get_query_parameter 是一个依赖项函数,它获取查询参数 q。然后,read_item 路径操作函数使用 Depends 来声明依赖项,并将 get_query_paramet...
FastAPI Pydantic 模型
在 FastAPI 中,[Pydantic](https://pydantic-docs.helpmanual.io/) 是一个用于数据验证和序列化的强大工具。Pydantic 模型用于定义输入和输出的数据结构,它们与 FastAPI 结合使用,使得请求和响应的数据验证和文档生成变得简单而直观。以下是一个使用 Pydantic 模型的 FastAPI 示例:from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()# 定义 Pydantic 模型class Item(BaseModel): name: str description: str = None price: float tax: float = None# 使用 Pydantic 模型作为请求体参数@app.post("/items/")async def create_item(item: Item): return item# 使用 Pydantic 模型作为响应体@app.get(&...
FastAPI 请求和响应
在 FastAPI 中,你可以使用参数注解定义请求参数,并使用函数的返回值定义响应。以下是一些基本的请求和响应示例:请求参数路径参数使用路径参数可以在 URL 中传递参数,例如 /items/{item_id}:from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")def read_item(item_id: int): return {"item_id": item_id}查询参数使用查询参数可以通过 URL 中的查询字符串传递参数,例如 /items/?limit=10:from fastapi import FastAPIapp = FastAPI()@app.get("/items/")def read_items(limit: int = 10): return {"limit": limit}请求体参数可以使用请求体参数接收 POST 或 PUT 请求中的数据。FastAPI 支持 JSON 和表单...
FastAPI 基本路由
在 FastAPI 中,基本路由定义非常简单,你可以使用 FastAPI 实例 (FastAPI() 创建的实例) 的装饰器来定义路由。以下是一些基本的路由示例:1. 根路径路由 (/):from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"message": "Hello, World!"}2. 带参数的路由 (/{parameter}):from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")def read_item(item_id: int): return {"item_id": item_id}3. 带查询参数的路由 (/?query_parameter=value):from fastapi import FastAPIapp = FastAPI()@app.get(&qu...
第一个 FastAPI 应用
pip install fastapi uvicorn然后,创建一个 Python 文件,比如 main.py,并添加以下内容:from fastapi import FastAPI# 创建 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}# 运行应用if __name__ == "__main__": import uvicorn uvicorn.run(app, host="127.0.0....
FastAPI 安装
FastAPI 的安装非常简单,你可以使用 pip 包管理器来进行安装。以下是安装 FastAPI 的步骤:1. 创建虚拟环境(可选): 在开始之前,强烈建议你使用虚拟环境,以隔离项目依赖。使用以下命令创建并激活虚拟环境: # 在项目目录中创建虚拟环境(Python 3.x 版本) python3 -m venv myenv # 激活虚拟环境(Linux/macOS) source myenv/bin/activate # 激活虚拟环境(Windows) myenv\Scripts\activate2. 安装 FastAPI: 使用 pip 安装 FastAPI: pip install fastapi 这将安装 FastAPI 框架及其依赖项。3. 安装 Uvicorn(可选): Uvicorn 是一个 ASGI 服务器,通常与 FastAPI 一起使用。你可以选择安装 Uvicorn: pip install uvicorn 你可以使用 Uvicorn 来运行 FastAPI 应用。现在,FastAPI 已经成功安装在你的虚拟环境...
FastAPI 教程
FastAPI 是一个现代、快速(使用 Starlette 和 Pydantic 构建)、基于类型的 Python web 框架。它提供了自动文档生成、输入验证、依赖注入等功能,使得构建 API 变得非常简单。以下是 FastAPI 的简单教程:安装 FastAPI使用 pip 安装 FastAPI 和 uvicorn(一个 ASGI 服务器):pip install fastapi uvicorn创建一个 FastAPI 应用创建一个 Python 文件(比如 main.py)并添加以下内容:from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_i...
FastAPI教程 高级安全 - 介绍
在 FastAPI 中,实现高级安全性涉及多个方面,包括用户身份验证、授权、安全标头处理、安全敏感数据的保护等。下面是一些关于 FastAPI 中高级安全性的介绍和示例:1. 用户身份验证:FastAPI 支持多种用户身份验证方案。一个常见的方案是使用 OAuth2,例如用户名密码授权。FastAPI 提供了 OAuth2PasswordBearer 类,用于处理基于用户名密码的用户身份验证。from fastapi import FastAPI, Depends, HTTPExceptionfrom fastapi.security import OAuth2PasswordBearerapp = FastAPI()oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")def get_current_user(token: str = Depends(oauth2_scheme)): # 实现验证逻辑,例如解析 Token,并从数据库中检索用户信息 # 如果验证失败,抛出 HTTPException...
FastAPI 高级安全
在 FastAPI 中,高级安全性通常涉及到用户身份验证、授权、安全标头的处理以及处理安全敏感的数据。以下是一些 FastAPI 中实现高级安全的示例:1. 用户身份验证和生成 Token:使用 OAuth2PasswordBearer 进行用户身份验证,并使用 Pydantic 模型定义 Token 的格式。from fastapi import FastAPI, Depends, HTTPException, statusfrom fastapi.security import OAuth2PasswordBearerfrom jose import JWTError, jwtapp = FastAPI()oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")SECRET_KEY = "your-secret-key"ALGORITHM = "HS256"def verify_token(token: str = Depends(oauth2_scheme)): ...
FastAPI教程 高级依赖
在 FastAPI 中,依赖是一种在路径操作函数执行之前运行的功能块,它可以接收参数并执行一些逻辑。在 FastAPI 中,依赖可以是普通的(同步)依赖或异步(异步生成器)依赖。以下是一些高级依赖的示例:1. 使用异步依赖:from fastapi import FastAPI, Depends, HTTPExceptionapp = FastAPI()async def get_query_token(token: str = Depends(lambda x: x.query_params.get("token"))): if token is None: raise HTTPException(status_code=400, detail="Token not provided") return token@app.get("/items/")async def read_items(token: str = Depends(get_query_token)): return {&quo...
FastAPI教程 响应 - 更改状态代码
在 FastAPI 中,你可以通过指定 status_code 参数来更改默认的状态代码。以下是一些示例:1. 返回不同的状态码的 JSON 响应:from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/{item_id}/", response_class=JSONResponse)async def read_item(item_id: int): if item_id == 42: content = {"message": "Item found"} return JSONResponse(content=content, status_code=200) else: content = {"message": "Item not found"} return JSON...
FastAPI教程 响应头
在 FastAPI 中,你可以使用响应模型、响应头等参数来自定义响应头。以下是一些示例:1. 返回带有自定义响应头的 JSON 响应:from fastapi import FastAPI, HTTPExceptionfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/")async def read_items(): content = {"message": "Read all items"} headers = {"X-Custom-Header": "value"} return JSONResponse(content=content, headers=headers)在这个例子中,我们使用 JSONResponse 返回 JSON 响应,并使用 headers 参数来指定自定义的响应头。2. 返回带有响应头的 HTML 响应:from fastapi import...
FastAPI教程 响应 Cookie
在 FastAPI 中,你可以使用 JSONResponse 或 HTMLResponse 类来返回带有 Cookie 的响应。以下是一些示例:1. 返回带有 Cookie 的 JSON 响应:from fastapi import FastAPI, Cookie, HTTPExceptionfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/")async def read_items(*, session_token: str = Cookie(None)): if session_token is None: raise HTTPException(status_code=400, detail="No session_token provided") content = {"message": "Read all items"} response = JSONRes...
FastAPI教程 OpenAPI 中的其他响应
在 FastAPI 中,你可以使用 OpenAPI(通过 Swagger UI 或 ReDoc)查看和测试 API 的文档。FastAPI 自动生成的 OpenAPI 文档中,你可以看到各种响应的详细信息。以下是一些常见的 OpenAPI 文档中的其他响应:1. 默认响应(default response):from fastapi import FastAPIapp = FastAPI()@app.get("/items/")async def read_items(): return {"message": "Read all items"}在这个例子中,默认的响应将被 FastAPI 自动生成,通常表示成功的状态码(200 OK)。2. 自定义响应的描述:from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/", response_class=JSO...
FastAPI教程 自定义响应 - HTML,流,文件和其他
在 FastAPI 中,你可以使用不同的响应类来处理各种类型的响应,包括 HTML、流、文件等。以下是一些示例:1. 返回 HTML 页面:from fastapi import FastAPIfrom fastapi.responses import HTMLResponseapp = FastAPI()@app.get("/html/", response_class=HTMLResponse)async def read_html(): content = "<html><body><h1>HTML Response</h1></body></html>" return HTMLResponse(content=content, status_code=200)在这个例子中,我们使用 HTMLResponse 类来返回 HTML 页面。可以通过 response_class 参数指定响应类型,并在返回的时候提供 HTML 内容。2. 返回流式响应:from ...
FastAPI教程 直接返回响应
在 FastAPI 中,你可以使用 JSONResponse 或 PlainTextResponse 类来直接返回自定义的响应。以下是两个示例:1. 使用 JSONResponse 返回 JSON 数据:from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/", response_class=JSONResponse)async def read_items(): content = {"message": "Read all items"} return JSONResponse(content=content, status_code=200)在这个例子中,我们导入了 JSONResponse 类,并在路径操作中使用 response_class 参数将其指定为返回的响应类型。然后,我们创建了一个 JSON 格式的数据(content),并使用 JSONRespon...
FastAPI教程 额外的状态码
在 FastAPI 中,你可以为路径操作返回的响应指定额外的状态码和自定义头信息。以下是一些使用额外状态码的示例:1. 返回额外的状态码: 使用 status_code 参数可以指定路径操作返回的状态码。例如: from fastapi import FastAPI app = FastAPI() @app.get("/items/", status_code=200) async def read_items(): return {"message": "Read all items"}2. 返回多个状态码: 通过使用 status_code 参数的列表,可以指定多个状态码。例如: from fastapi import FastAPI app = FastAPI() @app.get("/items/", status_code=[200, 201]) async def read_items(): return {"messag...
FastAPI教程 路径操作的高级配置
在 FastAPI 中,路径操作的高级配置主要通过在路径操作装饰器中使用参数进行实现。以下是一些常见的路径操作的高级配置选项:1. 请求方法和路径: 使用不同的请求方法(GET、POST、PUT等)可以为同一路径添加多个操作。例如: from fastapi import FastAPI app = FastAPI() @app.get("/items/") async def read_items(): return {"message": "Read all items"} @app.post("/items/") async def create_item(): return {"message": "Create an item"}2. 路径参数的数据类型: 通过在路径参数上使用类型提示,可以指定路径参数的数据类型。例如: from fastapi import FastAPI app = Fas...
FastAPI教程 高级用户指南 - 简介
FastAPI 是一个用于构建 Web API 的现代、快速(基于 Starlette 和 Pydantic)、并且使用 Python 3.7+ 类型提示的框架。它设计得既易于使用又强大,支持异步请求处理,具有自动文档生成功能,以及内置的依赖注入系统。以下是一个简单的 FastAPI 示例,用于创建一个带有路径参数和请求体验证的 API:from fastapi import FastAPI, Path, Query, Bodyapp = FastAPI()@app.get("/items/{item_id}")async def read_item( item_id: int = Path(..., title="The ID of the item to get", ge=1), q: str = Query(None, alias="item-query"), item: dict = Body(..., example={"name": "item name",...