随笔 - 214  文章 - 12  评论 - 40  阅读 - 38万

FastAPI 基础学习(十三) Header操作

作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

 

读取Header信息

基于Query、Path、Cookie等模块同样的模式,我们可以利用Header模块来声明headers。

我们可以用定义其他模块参数同样的方式,便捷的定义Header模块的参数信息。

Header是Query、Path、Cookie的姐妹类,它们都继承自Param类。

1、导入模块

from fastapi import Header

2、添加参数信息

参数信息的结构与Query、Path、Cookie等模块完全相同。

user_agent: str = Header(None)

 

完整示例:

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None)):
return {"User-Agent": user_agent}

3、自动转换

大多数headers中都带有"-"字符,如"User-Agent",但在Python中,User-Agent并不是一个合法的变量名称。

因此为了能正确提取headers中的信息,Header模块会把参数名称中的"_"转换成"-"。

Http Headers同时也是大小写不敏感的,因此我们可以在Python代码中使用user_agent来表示User-Agent

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None)):
    return {"user_agent": user_agent}

如果我们添加User-Agent参数并访问:

http://127.0.0.1:8000/items/

输出结果为:

{
    "user_agent": "Mozilla"
}

 

我们可以通过设置Header中的convert_underscores参数为Flase,来禁止这种从"_"到"-"的字符转换(大多数情况下并并不需要)。

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(*, user_agent: str = Header(None, convert_underscores=False)):
    return {"user_agent": user_agent}

4、重复headers处理

有些情况下,同样的header会带有多个值。

X-Token: foo
X-Token: bar

这时候,我们可以用一个list来接收重复的header数据。

复制代码
from typing import List
from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: List[str] = Header(None)):
    return {"X-Token values": x_token}
复制代码

响应结果为:

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

 

返回Header信息

我们可以在Response中返回Header信息给终端。

1、使用Response参数

我们可以在路径操作函数中声明Response参数,然后给这个临时的Response对象设置header信息。

FastAPI通过这个临时的Response对象解析出header信息(以及cookie信息和状态码等),然后放入到最终返回的Response对象中。

我们也可以在依赖项中使用Response参数,然后设置header信息(以及cookie信息等)。

复制代码
from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}
复制代码

2、直接返回Response

我们也可以在直接返回的Response对象中设置header信息。

复制代码
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)
复制代码

 

posted on   麦克煎蛋  阅读(5163)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示