持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
Header获取请求头参数
fastapi提供了非常方便的方式获取请求头参数,这个方式就是Header,它和 Query, Path 和 Cookie 参数的使用方式几乎一样。
- 比如从请求头中获取参数
User-Agent,fastapi会自动从请求头中把这个参数提取出来。
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)):
return {"User-Agent": user_agent}
自动转换
- 大多数标准的请求头参数会使用
-当连接符,比如:`User-Agent - 但是你看上例中,
user_agent是python的中一种命名风格,因此默认情况下,Header将把参数名称的字符从下划线 (_) 转换为连字符 (-) 来提取并记录 headers
- 同时,HTTP headers是大小写不敏感的,因此,因此可以使用标准Python样式(也称为 "snake_case")声明它们。
- 如果你希望fastapi不要帮忙做这些转换,那刻意把设置:
convert_underscores=False,默认是True - 如果设置
convert_underscores=True,那么需要保证客户端传过来该参数是:user_agent,否则该参数为None
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, convert_underscores=False)
):
return {"strange_header": strange_header}
请求头参数多个值
- 一个请求头参数可以有多个值,此时定义定义请求头参数的类型为列表即可
from typing import List, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Union[List[str], None] = Header(default=None)):
return {"X-Token values": x_token}
- 此时如果请求为
curl --location --request GET 'http://127.0.0.1:8000/items/' \
--header 'x-token: 123' \
--header 'x-token: 456'
- 此时响应为:
{
"X-Token values": [
"123",
"456"
]
}
Cookie
- fastapi提供了
Cookie参数,和Header\Body\Path\Query等参数类似,用来获取请求头中的Cookie参数。
- 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}