zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    【原创】禁止快播自动升级到最新版本,自己发现的方法
    又一灵异事件 Delphi 2007 在 Win7
    [DCC Error] E2161 Error: RLINK32: Error opening file "_____.drf"
    单例模式 改进
    estackoverflow with message 'stack overflow'
    所有可选的快捷键列表[转自万一博客]
    SQL server 除法运算
    正则表达式的一个坑[.\n]无效引起的血案
    getcwd()和__DIR__区别
    并发处理的技巧php
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12930938.html
Copyright © 2011-2022 走看看