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.自动转换下划线
Header
在Path
,Query
和Cookie
提供的功能之上有一点额外的功能。大多数标准的headers用 “连字符” 分隔,也称为 “减号” (
-
)。但是像
user-agent
这样的变量在Python中是无效的。因此, 默认情况下,
Header
将把参数名称的字符从下划线 (_
) 转换为连字符 (-
) 来提取并记录 headers.同时,HTTP headers 是大小写不敏感的,因此,因此可以使用标准Python样式(也称为 “snake_case”)声明它们。
因此,您可以像通常在Python代码中那样使用
user_agent
,而不需要将首字母大写为User_Agent
或类似的东西。如果出于某些原因,你需要禁用下划线到连字符的自动转换,设置
Header
的参数convert_underscores
为False
:
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"
]
}
没有回复内容