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

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


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机器人 涂六飞单机器人 美猴王机器人 大富豪机器人 速讯机器人 五球助手 十球助手

相关文章

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

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

大模型基础补全计划(一)——相关知识点回顾与Qwen3-VL-2B

引言:大模型时代的认知重构当GPT-4以接近人类水平的语言理解能力通过图灵测试时,我们正站在人工智能发展的历史性转折点。大模型技术不仅重塑了人机交互范式,更成为推动各行业智能化转型的核心引擎。本文作为...

生成AWR报告步骤

生成AWR报告是分析Oracle SGA性能的基础,主要通过SQL*Plus或PL/SQL Developer执行awrrpt.sql脚本完成。报告生成后,重点分析“Top 5 Time Events...

transformer学习资源汇总(下)

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

在PySide6/PyQt6的项目中实现样式切换处理(二)

一、引言与前期回顾在PySide6/PyQt6项目开发中,样式切换功能作为提升用户体验的关键特性,其重要性日益凸显。在系列文章的第一部分中,我们探讨了样式切换的基础概念、核心实现方案以及样式资源的组织...

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

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