您可以使用定义Query,Path和Cookie参数的相同方法来定义Header参数。

导入Header

  1. from fastapi import FastAPI, Header

声明Header参数

然后使用与PathQueryCookie相同的结构声明Header参数。
第一个值是默认值,您可以传递所有其他验证或注释参数:

  1. from fastapi import FastAPI, Header
  2. app = FastAPI()
  3. @app.get("/items/")
  4. async def read_items(*, user_agent: str = Header(None)):
  5. return {"User-Agent": user_agent}

详细教学 HeaderPathQueryCookie的“姐妹”类。它还继承自相同的常见Param类。 但是请记住,当您从fastapi导入QueryPathHeader和其他代码时,这些实际上是返回特殊类的函数。 信息 要声明标头,您需要使用Header,否则参数将被解释为查询参数。

自动转化

Header除了提供PathQueryCookie之外还具有一些额外的功能。
大多数标准标headers由“连字符”字符(也称为“减号”(-))分隔。但是像user-agent这样的变量在Python中无效。
因此,默认情况下,Header会将参数名称字符从下划线(_)转换为连字符(-),以提取并记录标题。
另外,HTTP标头不区分大小写,因此,您可以使用标准Python样式(也称为“ snake_case”)声明它们。
因此,您可以像在Python代码中一样正常使用useragent,而无需将首字母大写为UserAgent或类似名称。
如果由于某种原因需要禁用下划线自动转换为连字符,请将Header的参数convert_underscores设置为False:

  1. from fastapi import FastAPI, Header
  2. app = FastAPI()
  3. @app.get("/items/")
  4. async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):
  5. return {"strange_header": strange_header}

警告 在将convert_underscores设置为False之前,请记住,某些HTTP代理和服务器不允许使用带下划线的标头。

headers重复

可能会收到重复的标题。也就是说,同一标头具有多个值。
您可以使用类型声明中的列表来定义这些情况。
您将从重复标头中接收所有值作为Python列表。
例如,要声明可以多次出现的X-Token标头,可以编写:

  1. from typing import List
  2. from fastapi import FastAPI, Header
  3. app = FastAPI()
  4. @app.get("/items/")
  5. async def read_items(x_token: List[str] = Header(None)):
  6. return {"X-Token values": x_token}

如果与该路径操作通信,则发送两个HTTP标头,例如:

  1. X-Token: foo
  2. X-Token: bar

响应看起来像:

  1. {
  2. "X-Token values": [
  3. "bar",
  4. "foo"
  5. ]
  6. }

概括

使用与QueryPathCookie相同的通用模式用Header声明标题。
不用担心变量中的下划线,FastAPI将负责转换它们。