Cookie和Header-牛翰网

Cookie和Header

1.Cookie

from typing import Union

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: Union[str, None] = Cookie(default=None)):
    return {"ads_id": ads_id}
http://127.0.0.1:8000/items/

{"ads_id":"cccc"}

2.Header

为了声明headers, 你需要使用Header, 因为否则参数将被解释为查询参数。

2-1.自动转换下划线

HeaderPath, QueryCookie 提供的功能之上有一点额外的功能。

大多数标准的headers用 “连字符” 分隔,也称为 “减号” (-)。

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

因此, 默认情况下, Header 将把参数名称的字符从下划线 (_) 转换为连字符 (-) 来提取并记录 headers.

同时,HTTP headers 是大小写不敏感的,因此,因此可以使用标准Python样式(也称为 “snake_case”)声明它们。

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

如果出于某些原因,你需要禁用下划线到连字符的自动转换,设置Header的参数 convert_underscoresFalse:

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    user_agent: Union[str, None] = Header(default=None),
    accept : Union[str, None] = Header(default=None),
    accept_encoding: Union[str, None] = Header(default=None),
    accept_language: Union[str, None] = Header(default=None)
):
    return {"User-Agent": user_agent, "Accept": accept, "Accept-Encoding": accept_encoding, "Accept-Language": accept_language}
http://127.0.0.1:8000/items/

{
    "User-Agent": "PostmanRuntime/7.32.3",
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9,zh-TW;q=0.8"
}

2-2.禁用自动转换下划

Header设置参数convert underscores=False

不会把-转换为_,但是大小写换是会转换的

2-2-1.案列

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    accept : Union[str, None] = Header(default=None, convert_underscores=False),
    accept_language: Union[str, None] = Header(default=None, convert_underscores=False)
):
    return {"Accept": accept, "Accept-Language": accept_language}
http://127.0.0.1:8000/items/

{
    "Accept": "*/*",
    "Accept-Language": null
}

2-2-2.说明Accept为什么会被识别到

# 因为convert_underscores不会干扰大小写转换,所以read_items中可以识别到accept参数
Accept ->  Header(default=None, convert_underscores=False) -> accept

# 因为convert_underscores不会转换-,服务端识别的accept_language,所以不认识accept-language
Accept-Language -> Header(default=None, convert_underscores=False) -> accept-language

2-2-3.修改Accept-Language

只需要把Accept-Language中的横杠改为下划线Accept_Language

http://127.0.0.1:8000/items/

{
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9,zh-TW;q=0.8"
}

2-3.重复的Header参数

from typing import Union, List

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(token: Union[List[str], None] = Header(default=None)):
    return {"Token": token}
http://127.0.0.1:8000/items/

{
    "Token": [
        "abc",
        "qwer"
    ]
}
请登录后发表评论

    没有回复内容