FastAPI(5)- 查询参数 Query Parameters

简介: 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)


正确传参的请求结果

image.png


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


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 的请求结果

image.png

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 的请求结果

image.png

image.png

short 是 False 的请求结果

image.png

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


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
    }


参数传枚举值的请求结果

image.png

不传 sex 的请求结果

image.png

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

 

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


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


image.png

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

 

分开多次传 address 可以吗?

image.png

答案也是不行

 

那要怎么做呢?

用 Query 库! 下一篇会讲到!

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

相关文章
|
数据采集 JSON JavaScript
全面拥抱FastApi —三大参数及验证
全面拥抱FastApi —三大参数及验证
|
3月前
|
开发框架 JSON API
Python中FastAPI项目使用 Annotated的参数设计
Python中FastAPI项目使用 Annotated的参数设计
|
6月前
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
320 1
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
前端开发 中间件 API
FastAPI第二天---参数校验
FastAPI第二天---参数校验
228 0
FastAPI第二天---参数校验
|
Python
FastApi-07-查询参数校验
FastApi-07-查询参数校验
247 0
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
166 0
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖