前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI从入门到实战(5)——查询参数与字符串校验

FastAPI从入门到实战(5)——查询参数与字符串校验

作者头像
MinChess
发布2022-12-27 19:23:22
5540
发布2022-12-27 19:23:22
举报
文章被收录于专栏:九陌斋九陌斋

本文主要记录查询参数的传递、特性以及字符串类型的数据校验相关内容

查询参数

代码语言:javascript
复制
@app02.get("/stu02/query")
def stu02_query(query: float = 0.01):
    return {"query":query}

声明不属于路径参数的其他函数参数时,它自动解释为"查询字符串"参数

image-20221125111609466
image-20221125111609466

可选参数

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

声明参数的时候给定默认值,即会解析为选填的参数

image-20221125111735046
image-20221125111735046

类型转换

代码语言:javascript
复制
@app02.get("/stu02/query/bool")
def stu02_type_conversion(
        query:bool = False
):
    return {"布尔值":query}

该请求FastAPI会自动将传递的参数转为bool类型,当不能够转换的时候将会抛出错误; 能转换的如:false、FALSE、0、YES、off

代码语言:javascript
复制
{
    "detail": [
        {
            "loc": [
                "query",
                "query"
            ],
            "msg": "value could not be parsed to a boolean",
            "type": "type_error.bool"
        }
    ]
}
代码语言:javascript
复制
{
    "布尔值": false
}
代码语言:javascript
复制
{
    "布尔值": true
}
代码语言:javascript
复制
{
    "布尔值": true
}

使用Query默认值

声明Query即可使用FastAPIQuery进行数据的校验以及使用更多的元数据;

代码语言:javascript
复制
@app02.get("/stu02/query/default")
def stu02_query_QueryDefault(param:str = Query(default="QueryDefault")):
    return {"DefaultQuery":param}

设置参数default="默认参数"即可设置默认值

image-20221125114018006
image-20221125114018006

使用Query进行校验

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

image-20221125114300454
image-20221125114300454
image-20221125114319627
image-20221125114319627
  • 更多参数可以直接看源码:
代码语言:javascript
复制
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,
)

传递列表

代码语言:javascript
复制
@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接收并返回。

image-20221125115033359
image-20221125115033359

声明必需参数

在大多数情况下,需要某些东西时,可以简单地省略 default 参数,因此你通常不必使用 ...Required

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

image-20221125115643456
image-20221125115643456

源码

代码语言:javascript
复制
# -*- 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 就是一个任意类型的内置常量
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查询参数
  • 可选参数
  • 类型转换
  • 使用Query默认值
  • 使用Query进行校验
  • 传递列表
  • 声明必需参数
  • 源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档