首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FastAPI(5)- 查询参数 Query Parameters

FastAPI(5)- 查询参数 Query Parameters

作者头像
小菠萝测试笔记
发布2021-09-26 11:17:23
发布2021-09-26 11:17:23
1.7K0
举报

什么是查询参数?

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 会自动解析为查询参数
  • 和路径参数不同,查询参数可以是可选非必填的,也可以具有默认值

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

代码语言:javascript
复制
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)
正确传参的请求结果

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

代码语言:javascript
复制
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

查询参数类型自动转换

代码语言:javascript
复制
# 查询参数类型转换
@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 的请求结果

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

代码语言:javascript
复制
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 的值

查询参数能用 Liststr 传参吗?

代码语言:javascript
复制
# List[str]
@app.get("/list")
async def read_item(address: List[str] = None):
    return {"address": address}
postman 请求的结果
  • 即使参数值写成数组形式也不会传值成功,因为查询参数都是字符串
  • 所以 "广州","深圳" 其实是一个字符串 str,并不是 Liststr,那要怎么才能传数组呢?
分开多次传 address 可以吗?

答案也是不行

那要怎么做呢?

用 Query 库! 下一篇会讲到!

https://cloud.tencent.com/developer/article/1882548

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是查询参数?
  • FastAPI 的查询参数
  • 路径参数+请求参数的栗子
    • 正确传参的请求结果
  • 必传参数+可选参数的栗子
    • 不传 name 的请求结果
  • 查询参数类型自动转换
    • short 是 True 的请求结果
    • short 是 False 的请求结果
  • 指定枚举类型请求参数的栗子
    • 参数传枚举值的请求结果
    • 不传 sex 的请求结果
  • 查询参数能用 Liststr 传参吗?
    • postman 请求的结果
    • 分开多次传 address 可以吗?
    • 那要怎么做呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档