您可以使用定义Query,Path和Cookie参数的相同方法来定义Header参数。
导入Header
from fastapi import FastAPI, Header
声明Header参数
然后使用与Path,Query和Cookie相同的结构声明Header参数。
第一个值是默认值,您可以传递所有其他验证或注释参数:
from fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")async def read_items(*, user_agent: str = Header(None)):return {"User-Agent": user_agent}
详细教学
Header是Path,Query和Cookie的“姐妹”类。它还继承自相同的常见Param类。 但是请记住,当您从fastapi导入Query,Path,Header和其他代码时,这些实际上是返回特殊类的函数。 信息 要声明标头,您需要使用Header,否则参数将被解释为查询参数。
自动转化
Header除了提供Path,Query和Cookie之外还具有一些额外的功能。
大多数标准标headers由“连字符”字符(也称为“减号”(-))分隔。但是像user-agent这样的变量在Python中无效。
因此,默认情况下,Header会将参数名称字符从下划线(_)转换为连字符(-),以提取并记录标题。
另外,HTTP标头不区分大小写,因此,您可以使用标准Python样式(也称为“ snake_case”)声明它们。
因此,您可以像在Python代码中一样正常使用useragent,而无需将首字母大写为UserAgent或类似名称。
如果由于某种原因需要禁用下划线自动转换为连字符,请将Header的参数convert_underscores设置为False:
from fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):return {"strange_header": strange_header}
警告 在将convert_underscores设置为False之前,请记住,某些HTTP代理和服务器不允许使用带下划线的标头。
headers重复
可能会收到重复的标题。也就是说,同一标头具有多个值。
您可以使用类型声明中的列表来定义这些情况。
您将从重复标头中接收所有值作为Python列表。
例如,要声明可以多次出现的X-Token标头,可以编写:
from typing import Listfrom fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")async def read_items(x_token: List[str] = Header(None)):return {"X-Token values": x_token}
如果与该路径操作通信,则发送两个HTTP标头,例如:
X-Token: fooX-Token: bar
响应看起来像:
{"X-Token values": ["bar","foo"]}
概括
使用与Query,Path和Cookie相同的通用模式用Header声明标题。
不用担心变量中的下划线,FastAPI将负责转换它们。
