首页 > 其他分享 >FastAPI学习-13. 请求Header 参数

FastAPI学习-13. 请求Header 参数

时间:2023-10-25 11:02:39浏览次数:39  
标签:13 header FastAPI agent Header user import

前言

你可以使用定义 QueryPath 和 Cookie 参数一样的方法定义 Header 参数。

声明 Header 参数

首先导入 Header:

from fastapi import FastAPI, Header

然后使用和PathQuery and Cookie 一样的结构定义 header 参数

第一个值是默认值,你可以传递所有的额外验证或注释参数:

from typing import Union

from fastapi import FastAPI, Header
from typing_extensions import Annotated

app = FastAPI()


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

Header 是 PathQuery 和 Cookie 的兄弟类型。它也继承自通用的 Param 类.

但是请记得,当你从fastapi导入 QueryPathHeader, 或其他时,实际上导入的是返回特定类型的函数。

为了声明headers, 你需要使用Header, 因为否则参数将被解释为查询参数。

使用示例

@app.get("/demo")  
async def demo(  
        user_agent: Union[str, None] = Header()  
):  
    print(f"user_agent : {user_agent}")  
    return {  
        "message": "Hello demo!",  
        "data": {"user_agent": user_agent}  
    }


自动转换

Header 在 PathQuery 和 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
from typing_extensions import Annotated

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: Annotated[
        Union[str, None], Header(convert_underscores=False)
    ] = None
):
    return {"strange_header": strange_header}

在设置 convert_underscores 为 False 之前,请记住,一些HTTP代理和服务器不允许使用带有下划线的headers。

重复的 headers

有可能收到重复的headers。这意味着,相同的header具有多个值。

您可以在类型声明中使用一个list来定义这些情况。

你可以通过一个Python list 的形式获得重复header的所有值。

比如, 为了声明一个 X-Token header 可以出现多次,你可以这样写:

from typing import List, Union

from fastapi import FastAPI, Header
from typing_extensions import Annotated

app = FastAPI()


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

如果你与_路径操作_通信时发送两个HTTP headers,就像:

X-Token: foo 
X-Token: bar

响应会是:

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

回顾

使用 Header 来声明 header , 使用和 QueryPath 与 Cookie 相同的模式。

不用担心变量中的下划线,FastAPI 会负责转换它们。



标签:13,header,FastAPI,agent,Header,user,import
From: https://blog.51cto.com/u_15249893/8015592

相关文章

  • FastAPI学习-12. 请求Cookie 参数
    前言你可以像定义 Query 参数和 Path 参数一样来定义 Cookie 参数。声明 Cookie 参数首先,导入 Cookie:fromfastapiimportCookie,FastAPI声明 Cookie 参数的结构与声明 Query 参数和 Path 参数时相同。第一个值是参数的默认值,同时也可以传递所有验证参数或注释参......
  • FastAPI学习-10. 路由管理APIRouter
    前言在Flask中,我们一般用蓝图Blueprint来处理多个模块的视图,在fastapi中也有类似的功能通过APIRouter来管理。路由管理APIRouter如果你正在开发一个应用程序或WebAPI,很少会将所有的内容都放在一个文件中。FastAPI提供了一个方便的工具,可以在保持所有灵活性的同时构建你......
  • FastAPI学习-11. 请求body - 嵌套模型
    前言使用 FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型(归功于Pydantic)List字段你可以将一个属性定义为拥有子元素的类型。例如Python list:fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classIte......
  • fastapi + strawberry(graphql)
    Strawberryhttps://fastapi.tiangolo.com/zh/how-to/graphql/GraphQLwithStrawberry¶IfyouneedorwanttoworkwithGraphQL,StrawberryistherecommendedlibraryasithasthedesignclosesttoFastAPI'sdesign,it'sallbasedontypeannotat......
  • LeetCode Day13 239&347
    //利用双端队列手动实现单调队列/***用一个单调队列来存储对应的下标,每当窗口滑动的时候,直接取队列的头部指针对应的值放入结果集即可*单调队列类似(tail-->)3-->2-->1-->0(-->head)(右边为头结点,元素存的是下标)*/239. 滑动窗口最大值classSolution{......
  • 升级Lync Server 2013到Skype for Business 2019(二十)
    写在前面在上一章我们完成了持久聊天服务器下线,本章我们将介绍如何下线LyncServer2013前端服务器。前端服务器功能移除打开拓扑生成器,下载最新的拓扑。导航到Lync2013前端服务器池,编辑属性。取消勾选如下功能,之后点击OK。ConferencingEnterpriseVoiceArchivingMonitoring发布拓......
  • 13.4 DirectX内部劫持绘制
    相对于外部绘图技术的不稳定性,内部绘制则显得更加流程与稳定,在Dx9环境中,函数EndScene是在绘制3D场景后,用于完成将最终的图像渲染到屏幕的一系列操作的函数。它会将缓冲区中的图像清空,设置视口和其他渲染状态,执行顶点和像素着色器,最后在后台缓冲区中生成一张完整的渲染图像,然后将其......
  • [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt
    [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt--//当年提的问题,链接http://blog.itpub.net/267265/viewspace-2763181/=>[20210316]为什么刷新缓存后输出记录顺序发生变化.txt,--//正好别人问我,顺便我重复看了一下,顺便解答这个问题,实际上也许解答不对,许多行为我仅仅是猜测......
  • [20231013]rename IDL_UB1$的恢复.txt
    [20231013]renameIDL_UB1$的恢复.txt--//看了https://www.anbob.com/archives/7545.html链接,对方rename操作,导致无法建立表操作.--//idl_ub1$表是用来存储PL/SQL的代码单元的,包括DIANA等,IDL在这里代表InterfaceDefinitionLanguage.--//这个对象的含义可以从Ixora找到一点提示......
  • 每日总结13
    今天上午上了软件设计的实验课,课上完成了实验一的作业,相对来说比较简单。然后上了杨子光老师的人机交互技术,学习了hplus,hples提供了各种前端组件,方便了前端代码的书写。下午完成了李静老师的实验作业,用hive统计单词数量。......