在FastAPI中设置响应头有多种方式,具体取决于需求和场景。以下是详细说明:

admin4个月前花开月下机器人55


1. ‌直接在返回值中设置响应头(推荐)‌

适用场景‌:简单响应,无需自定义响应类。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Response


app = FastAPI()


@app.get("/custom-header")

async def custom_header(response: Response):

    response.headers["X-Custom-Header"] = "Custom Value"

    return {"message": "Check the headers"}


说明‌:通过在视图函数中直接操作response.headers字典,添加自定义头。FastAPI会自动处理响应体和状态码。

2. ‌使用Response类显式控制‌

适用场景‌:需要完全控制响应格式(如状态码、内容类型)。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Response


app = FastAPI()


@app.get("/custom-response")

async def custom_response():

    content = '{"message": "Hello World"}'

    headers = {"X-Custom-Header": "custom-value"}

    return Response(

        content=content,

        media_type="application/json",

        headers=headers,

        status_code=201

    )


说明‌:通过Response类显式设置content、headers和status_code,适用于需要自定义响应格式的场景。

3. ‌使用JSONResponse简化JSON响应‌

适用场景‌:返回JSON数据时,自动处理序列化。

示例代码‌:

python

Copy Code

from fastapi import FastAPI

from fastapi.responses import JSONResponse


app = FastAPI()


@app.get("/json-response")

async def json_response():

    return JSONResponse(

        content={"message": "Hello World"},

        status_code=201,

        headers={"X-Custom-Header": "custom-value"}

    )


说明‌:JSONResponse是Response的子类,专门用于JSON响应,简化了序列化过程。

4. ‌全局错误处理中添加响应头‌

适用场景‌:自定义错误响应时添加额外头信息。

示例代码‌:

python

Copy Code

from fastapi import FastAPI, Request, HTTPException

from fastapi.responses import JSONResponse


app = FastAPI()


@app.exception_handler(HTTPException)

async def unicorn_exception_handler(request: Request, exc: HTTPException):

    return JSONResponse(

        status_code=exc.status_code,

        content={"message": exc.detail},

        headers={"X-Custom-Header": "Error-Info"}

    )


说明‌:在异常处理器中通过JSONResponse的headers参数添加自定义头。

5. ‌注意事项‌

大小写敏感性‌:HTTP头是大小写不敏感的,但FastAPI默认将下划线转换为连字符(如x_custom_header → x-custom-header)。若需保留下划线,可设置convert_underscores=False。

重复头处理‌:若需处理重复头(如X-Custom-Header有多个值),可使用List[str]类型声明:

python

Copy Code

from fastapi import FastAPI, Header

from typing import List


app = FastAPI()


@app.get("/multi-headers")

async def multi_headers(x_custom_header: List[str] = Header(None)):

    return {"headers": x_custom_header}


总结


FastAPI通过多种方式灵活设置响应头,推荐优先使用直接操作response.headers的方式,结合Response或JSONResponse类可实现更精细控制。


澳五机器人 澳八机器人 河内机器人 加拿大机器人 花开月下机器人 朱雀机器人 速飞机器人 名爵机器人 飞天机器人 BV机器人 涂六飞单机器人 美猴王机器人 大富豪机器人 速讯机器人 五球助手 十球助手

相关文章

transformer学习资源汇总(下)

三、进阶学习与实践资源(一)进阶理论书籍《The Geometry of Intelligence: Foundations of Transformer Networks in Deep Learn...

解决 iOS 上 Swiper 滑动图片闪烁问题:原因分析与最有效的修复方式(四)

在前三篇系列文章中,我们系统性地分析了 iOS 上 Swiper 滑动图片闪烁问题的根源,并提供了从硬件加速优化、预加载策略到性能监控的完整解决方案。然而,随着移动端技术的快速发展,开发者面临更复杂的...

结构化机器学习项目第一周:机器学习策略(二)——数据集设置

在机器学习项目中,数据集设置是构建高效模型的关键起点,直接影响模型性能与泛化能力。本文将深入探讨数据集划分、数据分布分析、验证集构建等核心环节,结合实践经验总结最佳策略。一、数据集划分:训练集、验证集...

[大模型实战 05] 大模型实战的杀手锏:模型微调

在人工智能技术飞速发展的今天,大模型已成为驱动智能应用的核心引擎。然而,通用大模型在面对垂直领域任务时,常因“水土不服”而表现平平——其输出可能偏离业务规范,或无法捕捉行业特有的语义逻辑。‌模型微调(...

【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real

引言 在人工智能与自动控制交叉领域,强化学习(Reinforcement Learning, RL)正成为解决复杂控制问题的关键技术。本文基于系统学习笔记,深入探讨强化学习的核心算法——策略...

FastAPI数据库实战:从SQLAlchemy原理到高效连接管理,告别性能瓶颈(一)

引言在构建高性能API时,数据库操作往往是性能瓶颈的主要来源。FastAPI作为现代Python Web框架的代表,与SQLAlchemy这一强大的ORM工具结合使用时,能够显著提升开发效率。然而,如...