本文主要记录查询参数的传递、特性以及字符串类型的数据校验相关内容
查询参数
@app02.get("/stu02/query")
def stu02_query(query: float = 0.01):
return {"query":query}
声明不属于路径参数的其他函数参数时,它自动解释为"查询字符串"参数
可选参数
@app02.get("/stu02/query/select")
def stu02_query_select(string: Optional[float] = None,number:int = 1,optionalfloat:float = 6.33):
return {"String":string,"Number":number,"optionalfloat":optionalfloat}
声明参数的时候给定默认值,即会解析为选填的参数
类型转换
@app02.get("/stu02/query/bool")
def stu02_type_conversion(
query:bool = False
):
return {"布尔值":query}
该请求
FastAPI
会自动将传递的参数转为bool
类型,当不能够转换的时候将会抛出错误;能转换的如:false、FALSE、0、YES、off
{
"detail": [
{
"loc": [
"query",
"query"
],
"msg": "value could not be parsed to a boolean",
"type": "type_error.bool"
}
]
}
{
"布尔值": false
}
{
"布尔值": true
}
{
"布尔值": true
}
使用Query默认值
声明
Query
即可使用FastAPI
的Query
进行数据的校验以及使用更多的元数据;
@app02.get("/stu02/query/default")
def stu02_query_QueryDefault(param:str = Query(default="QueryDefault")):
return {"DefaultQuery":param}
设置参数
default="默认参数"
即可设置默认值
使用Query进行校验
@app02.get("/stu02/query/validate")
def stu02_query_QueryValidate(
param:str = Query(default= None,min_length=2,max_length=10,regex="^M")
):
return {"param":param}
设置对应的参数即可进行校验,如上面的代码就是校验其最小长度为2,最大为10,而且利用正则表达式限定必须为
M
开头
- 更多参数可以直接看源码:
def Query( # noqa: N802
default: Any = Undefined,
*,
alias: Optional[str] = None, # 元数据 别名
title: Optional[str] = None, # 元数据 标题
description: Optional[str] = None, # 元数据 描述
gt: Optional[float] = None, # 数值校验
ge: Optional[float] = None,
lt: Optional[float] = None,
le: Optional[float] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
regex: Optional[str] = None,
example: Any = Undefined,
examples: Optional[Dict[str, Any]] = None,
deprecated: Optional[bool] = None,
include_in_schema: bool = True,
**extra: Any,
)
传递列表
@app02.get("/stu02/query/querylist")
def stu02_query_QueryList(
param_list: List[str] = Query(default=["List_01", "List_02", "List_03"], alias="参数别名")
):
return {"param_list":param_list}
该示例即请求会传递一个列表的参数,FastAPI接收并返回。
声明必需参数
在大多数情况下,需要某些东西时,可以简单地省略 default
参数,因此你通常不必使用 ...
或 Required
@app02.get("/stu02/query/querymust")
def stu02_query_QueryMust(
param:str,
param_None: Optional[str] = Query(default=...), # 使其可以接受None
param_Pydantic:str = Query(default=Required)
):
return {"param":param,"param_None":param_None,"param_Pydantic":param_Pydantic}
上面三个参数都是必需的参数;
param参数没有默认值,就被解析为必需参数;
param_None参数利用Optional声明为可选的参数,再使用Query的...声明为必需参数;
param_Pydantic参数利用Query的default参数设置为Required声明为必需的参数;
Required一个Pydantic内的任意类型的内置常量,源码:
Required: Any = Ellipsis
源码
# -*- coding: utf-8 -*-
# @Time: 2022/11/24 21:40
# @Author: MinChess
# @File: stu02.py
# @Software: PyCharm
from fastapi import APIRouter,Query
from typing import Optional,List
from pydantic import Required
app02 = APIRouter()
# 查询参数
@app02.get("/stu02/query")
def stu02_query(query: float = 0.01):
return {"query":query}
# 可选参数
@app02.get("/stu02/query/select")
def stu02_query_select(string: Optional[float] = None,number:int = 1,optionalfloat:float = 6.33):
return {"String":string,"Number":number,"optionalfloat":optionalfloat}
# 类型转换
@app02.get("/stu02/query/bool")
def stu02_type_conversion(
query:bool = False
):
return {"布尔值":query}
# 使用Query默认值
@app02.get("/stu02/query/default")
def stu02_query_QueryDefault(param:str = Query(default="QueryDefault")):
return {"DefaultQuery":param}
# 使用Query进行校验
@app02.get("/stu02/query/validate")
def stu02_query_QueryValidate(
param:str = Query(default= None,min_length=2,max_length=10,regex="^M")
):
return {"param":param}
# 传递列表
@app02.get("/stu02/query/querylist")
def stu02_query_QueryList(
param_list: List[str] = Query(default=["List_01", "List_02", "List_03"], alias="参数别名")
):
return {"param_list":param_list}
# 声明必需参数
@app02.get("/stu02/query/querymust")
def stu02_query_QueryMust(
param:str,
param_None: Optional[str] = Query(default=...), # 使其可以接受None
param_Pydantic:str = Query(default=Required)
):
return {"param":param,"param_None":param_None,"param_Pydantic":param_Pydantic}
# 在大多数情况下,需要某些东西时,可以简单地省略 default 参数,因此你通常不必使用 ... 或 Required
# Required: Any = Ellipsis 就是一个任意类型的内置常量
评论区