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


猜你喜欢
- 实验环境:windows 7,anaconda 3(Python 3.5),tensorflow(gpu/cpu)函数介绍:标准化处理可以使
- MySQL时间盲注五种延时方法 (PWNHUB 非预期解)延时注入函数五种:sleep(),benchmark(t,exp),笛卡尔积,GE
- 1. 图像轮廓1.1 findContours介绍cv2.findContours(img, mode, method)mode:轮廓检索模
- 1、装饰器装饰器(Decorator):从字面上理解,就是装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限
- 当设计一个产品,其中很多地方要把日期类型保存到数据库中,如果产品有兼容不同数据库产品的需求,那么,应当怎样设计呢?当然,首先想到的是,使用数
- <html><head><meta http-equiv="Content-Type" c
- 把昨天做的高级查询界面完善了一下,支持动态添加多个查询条件、定义逻辑关系,支持整形、浮点、字符串、日期、布尔值、自定义选择列表的录入,通过E
- 前言大家都知道Web运维总要关注相关域名的实时2xx/s、4xx/s、5xx/s、响应时间、带宽等这些指标,之前的日志是五分钟一分割,简单的
- Python语言中import的使用很简单,直接使用 import module_name 语句导入即可。这里我主要写一下"imp
- 本文记录django中如何使用celery完成异步任务。Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一
- 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏、后台等方面,python也大放异彩,本篇博文将按照正规的
- 用户登录验证脚本,Chkpwd.asp<% '=======用户登录验证脚本======= '如果尚未定义Passed
- div+css实现圆角边框,在网络上查看了一下,很多都是实现圆角的矩形的方法,我在这里介绍的是实现圆角矩形边框的方法。用代码说明问题:<
- mysql连接超时和mysql连接错误在生产环境中,偶尔且不规律的出现mysql连接超时和创建连接出错的问题:15-09-2020 13:2
- Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift
- 附加数据库就可以完成. 附加数据库: &nb
- 具体代码如下所示:<!DOCTYPE html><html> <head> &
- 可以写一个函数: 主要是使用正则来判断。另外输入字符是空的话,使用"-"来替换。CREATE FUNCTION [dbo
- 为了实现这样的小工具,我们先设想有下面这些功能。1、可以自定义整理某一个路径下面的所有需要被整理的文件。2、默认情况下,使用文件后缀作为同一
- 开发中偶尔需要判断网络的连通性,没有什么方法比 ping 更直接了当,通常检查网络情况都是运行命令ping www.baidu.com ,查