python中fastapi设置查询参数可选或必选

作者:??小飞牛???? 时间:2021-11-04 12:25:18 

前言:

在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数。

可选查询参数

  • 只要给查询参数的默认值设置为None,表示该查询参数是可选参数。

 from fastapi import FastAPI
 
 app = FastAPI()
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q=None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

补充:此时路径操作函数内的参数有两个,一个是路径参数item_id,一个是查询参数q,fastapi是可以区分他们的。

必选查询参数

  • 当你为查询参数设置默认值时,则该参数在URL中不是必须的。

  • 如果你不想添加默认值,而只是想使该参数成为可选的,则将默认值设置为 None

  • 但当你想让一个查询参数成为必需的,不声明任何默认值就可以.

  • 比如:这里的查询参数 needy 是类型为 str 的必需查询参数。

 from fastapi import FastAPI
 
 app = FastAPI()
 @app.get("/items/{item_id}")
 async def read_user_item(item_id: str, needy: str):
     item = {"item_id": item_id, "needy": needy}
     return item
  • 如果在URL中没有查询参数needy,则报错

 {
     "detail": [
         {
             "loc": [
                 "query",
                 "needy"
             ],
             "msg": "field required",
             "type": "value_error.missing"
         }
     ]
 }

可选和必选参数共存

  • 也可以定义一些参数为必需的,一些具有默认值,而某些则完全是可选的

  • 此时:itme_id是路径参数,needy是必选路径参数,skip是有默认值必选查询参数,limit是可选查询参数。

 from fastapi import FastAPI
 
 app = FastAPI()
 @app.get("/items/{item_id}")
 async def read_user_item(
     item_id: str, needy: str, skip: int = 0, limit=None
 ):
     item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
     return item

为可选参数做类型提示

  • 比如一个可选的参数q,如有该参数时,他的类型是整型,此时定义类型提示如下

  • 使用typing模块下的Union做类型提示,Union[int, None]表示类型是int或者None

  • 此时对于URL:http://127.0.0.1:8000/items/12?q=12,参数q就会自动转化为数字12

 from typing import Union
 from fastapi import FastAPI
 app = FastAPI()
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q: Union[int, None] = None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

补充1:

  • 可能为空的情况做类型提示,一般使用一个比typing.Union更加方便的类型:typing.Optional

  • 因为,Optional[X] is equivalent to Union[X, None]

  • 所以,上面的类似等价于q: Optional[int] = None\

补充2:

  • 只要给查询参数默认值None就表示它是可选查询参数,和类型提示无关。

  • 类型提示的功能在于如果该值存在是他应该是什么类型的变量并做类型转换和校验。

来源:https://juejin.cn/post/7105568560461643783

标签:python,fastapi,查询,参数,必选
0
投稿

猜你喜欢

  • Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    2023-03-09 04:22:05
  • ASP所有的Session变量获取实现代码

    2011-03-11 10:44:00
  • 使用python读取txt文件的内容,并删除重复的行数方法

    2022-05-08 19:41:56
  • MySQL的命令行提示符及其表达的意思

    2008-03-17 13:34:00
  • 浅析CMS生成静态页面的两种方案

    2008-03-17 12:51:00
  • Python实现连接两个无规则列表后删除重复元素并升序排序的方法

    2021-05-23 10:35:54
  • Python入门篇之字典

    2022-09-24 23:53:47
  • 一文带你了解Python中的字符串是什么

    2021-10-16 06:05:27
  • python扩展库numpy入门教程

    2022-05-05 14:28:05
  • python中return不返回值的问题解析

    2021-04-26 20:36:07
  • 详解Pandas与openpyxl库的超强结合

    2021-09-05 03:52:15
  • pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)

    2021-07-02 16:53:41
  • JS中的public和private对象,即static修饰符

    2023-08-29 21:53:13
  • asp如何调用DLL来加快服务器的执行速度?

    2009-11-15 20:07:00
  • Python搭建代理IP池实现检测IP的方法

    2023-10-05 04:42:51
  • 重新阅读《HTTP协议基础》

    2008-04-04 17:40:00
  • 可以输入的下拉菜单

    2009-01-04 14:21:00
  • Python全局变量关键字global的简单使用

    2022-01-29 11:03:49
  • MYSQL教程:MYSQL字符集支持

    2009-02-27 15:55:00
  • JavaScript Memoization

    2008-05-01 12:48:00
  • asp之家 网络编程 m.aspxhome.com