• FastAPI(5)- 查询参数 Query Parameters


    什么是查询参数?

    http://127.0.0.1:8000/get?name=xxx&age=18

    http://127.0.0.1:8000/get?age=18&name=xxx

    在 url 的 ? 后面跟着的一组或多组键值对,就是查询参数

    FastAPI 的查询参数

    • 当声明了不属于路径参数以外的其他函数参数时, FastAPI 会自动解析为查询参数
    • 和路径参数不同,查询参数可以是可选非必填的,也可以具有默认值

    路径参数+请求参数的栗子

    from fastapi import FastAPI
    import uvicorn
    
    
    app = FastAPI()
    
    
    # 路径参数+请求参数
    @app.get("/items/{item_id}")
    async def read_item(item_id: str, name: str):
        return {"item_id": item_id, "name": name}
    
    
    if __name__ == "__main__":
        uvicorn.run(app="3_get_query:app", host="127.0.0.1", port=8080, reload=True, debug=True)

    正确传参的请求结果

    必传参数+可选参数的栗子

    from typing import Optional
    
    # 必传参数+可选参数
    @app.get("/items")
    async def read_item(item_id: str, name: Optional[str] = None):
        return {"item_id": item_id, "name": name}

    不传 name 的请求结果

    name 没传所以取默认值 None

    查询参数类型自动转换

    # 查询参数类型转换
    @app.get("/items/{item_id}")
    async def read_item(item_id: str, q: Optional[str] = None, short: bool = False):
        item = {"item_id": item_id}
        if q:
            item.update({"q": q})
        if not short:
         # 如果 short == False,则加多一个键 description
            item.update(
                {"description": "This is an amazing item that has a long description"}
            )
        return item

    short 是 True 的请求结果

    short 是 False 的请求结果

      

    指定枚举类型请求参数的栗子

    from enum import Enum
    from typing import Optional, List
    
    
    # 自定义枚举类
    class ModelName(Enum):
        boy = ""
        girl = ""
        unknown = "不知道"
    
    
    @app.get("/item_enum")
    async def read_item(name: str,
                        sex: Optional[ModelName] = ModelName.unknown):
        return {
            "name": name,
            "sex": sex
        }

    参数传枚举值的请求结果

    不传 sex 的请求结果

    不传 sex,会取 sex 的默认值:枚举类中的 unknown 的值

    查询参数能用 List[str] 传参吗?

    # List[str]
    @app.get("/list")
    async def read_item(address: List[str] = None):
        return {"address": address}

    postman 请求的结果

    • 即使参数值写成数组形式也不会传值成功,因为查询参数都是字符串
    • 所以 ["广州","深圳"] 其实是一个字符串 str,并不是 List[str],那要怎么才能传数组呢?

    分开多次传 address 可以吗?

    答案也是不行

    那要怎么做呢?

    用 Query 库! 下一篇会讲到!

    https://www.cnblogs.com/poloyy/p/15306809.html

  • 相关阅读:
    2018年Q1增长最快的20个技能
    微信备份方法
    [转] 浅谈 OpenResty
    Angular默认路由策略-PathLocationStrategy策略页面刷新报404错误解决方案
    [转] ABP框架Web API跨域问题的解决方案
    [转] Win10插入U盘后双击无法打开,无法访问,显示设备未就绪;驱动哥帮你解决
    java jdk 8u191 官网下载地址
    IDEA 2019 注册码
    [JAVA] maven 阿里云节点 settings.xml
    .net webapi跨域 web.config配置
  • 原文地址:https://www.cnblogs.com/poloyy/p/15303302.html
Copyright © 2020-2023  润新知