Skip to content

请求头参数

您可以像定义 QueryPathCookie参数一样定义 Header 参数.

首先,导入Header:

from typing import Optional

from flask_sugar import Sugar, Header

app = Sugar(__name__)


@app.get("/")
def index(user_agent: Optional[str] = Header(None)):
    return {"user_agent": user_agent}

声明Header参数

然后使用与PathQueryCookie相同的结构声明头参数.

第一个值是默认值,您可以传递所有额外的验证或注释参数:

from typing import Optional

from flask_sugar import Sugar, Header

app = Sugar(__name__)


@app.get("/")
def index(user_agent: Optional[str] = Header(None)):
    return {"user_agent": user_agent}

技术细节

HeaderPathQuery 的“姐妹”类。 它们继承自 Param 类。

但请记住,当你从 flask_sugar 中导入 QueryPathHeader 等时,这些实际上是返回特殊类的函数.

Info

要声明header,您需要使用Header,否则参数将被解释为查询参数.

自动转换

HeaderPathQueryCookie提供的基础上有一些额外的功能.

大多数标准标题由"连字符"字符分隔,也称为"减号"(-).

但是像user-agent这样的变量在 Python 中是无效的。

因此,默认情况下,Header 会将参数名称字符从下划线 (_) 转换为连字符 (-) 以提取和记录请求头。

此外,HTTP 标头不区分大小写,因此您可以使用标准 Python 样式(也称为“蛇形命名法”)声明它们。

因此,您可以像在 Python 代码中通常使用的那样使用 user_agent,而不需要将首字母大写为 User_Agent 或类似的东西。

header列表

可能会收到具有多个值的同一个header。

您可以使用类型声明中的列表来定义这些情况。

您将把 header 中的值分割为 Python的list.

例如, 声明一个具有多个值的header X-Token, 你可以这样写:

from flask_sugar import Sugar, Header

app = Sugar(__name__)


@app.get("/")
def index(x_token: List[str] = Header(None)):
    return {"X-Token values": x_token}

你将发送一个这样的header与视图函数通信:

X-Token: foo,bar

响应将类似于:

{
    "X-Token values": [
        "bar",
        "foo"
    ]
}

回顾

使用Header声明header,使用与QueryPath相同的通用模式.

并且不要担心变量中的下划线,FLask Sugar 将负责转换它们。