FastAPI(6)- 详解 Query (下)

简介: FastAPI(6)- 详解 Query (下)

添加正则表达式校验


# 正则表达式
@app.get("/items/regular")
async def read_items(
        name: Optional[str] = Query(
            default=None,
            min_length=3,
            max_length=10,
            regex="^小.*菠萝$"
        )):
    return {"name": name}


校验成功的请求结果

image.png

name 不满足正则,校验失败的请求结果

image.png

查看 Swagger API 文档

image.png


正则表达式教程

https://www.cnblogs.com/poloyy/category/1796055.html

 

必传参数+长度最小为 3


不使用 Query 时,查询参数怎么必传?

不指定默认值就行

name: str

 

当使用 Query 时,查询参数怎么必传?

Query 默认值参数 default 是必传的,传了默认值不就变成可选参数了吗,那怎么办呢?


image.png


# 必传参数

@app.get("/items/require")

async def read_items(name: Optional[str] = Query(default=..., max_length=10)):

   return {"name": name}

只需要将 ... 赋值给 default 参数,FastAPI 就会知道这个参数是必传的

 

校验成功的请求结果

image.png


没有传必传参数,校验失败的请求结果

image.png

因为是必传参数,不传则报错!

 

查看 Swagger API 文档

image.png

大大的 required 标识!代表必传哦!

 

List 类型的查询参数


使用 Query 时,可以指定查询参数的类型为 List,即一个参数可以接收多个值

from typing import List
# List[str]
@app.get("/list")
async def read_item(address: Optional[List[str]] = Query([], max_length=2)):
    return {"address": address}


没有传参的请求结果

image.png

取 address 默认值 []

 

正确传参的请求结果

image.png

设置了校验 max_length=2,但传了三个 address 也正常,证明这个 max_length 的校验对数组长度并不生效

 

校验失败的请求结果

image.png

看来 max_length 校验仍然会对数组里面的字符串生效!

 

查看 Swagger API 文档

image.png


List 类型的查询参数有多个默认值


@app.get("/list/default")

async def read_item(address: Optional[List[str]] = Query(["广州", "深圳"])):

   return {"address": address}

 

不传参的请求结果

image.png

元数据


Query 可以添加元数据相关信息,这些信息将包含在生成的 OpenAPI 中,并由文档用户界面和外部工具使用

 

四种元数据参数

# 别名
alias: Optional[str] = None
# 标题
title: Optional[str] = None
# 描述
description: Optional[str] = None
# 是否弃用
deprecated: Optional[bool] = None


实际代码

# 元数据
@app.get("/items/all")
async def read_items(
        name: Optional[str] = Query(
            default=None,
            min_length=2,
            max_length=50,
            regex="^菠萝$",
            alias="name_alias_query",
            title="标题",
            description="很长很长的描述",
            deprecated=True,
        )
):
    return {"name": name}


不使用 alias 进行传参的请求结果


image.png

当做不存在的查询参数处理

 

用 alias 进行传参的请求结果

image.png

定义了 alias,记得要用 alias 进行传参

 

查看 Swagger API 文档

image.png

  • title 字段并不会显示在这里,只会显示在 JSON Schema 中
  • 而 JSON Schema 只有请求参数方式为 Request Body 才会显示,这里是查询参数,所以并没有 JSON Schema 这一说;后面的文章会详细介绍

 

总结


限定于字符串的校验:

  • min_length
  • max_length
  • regex

 

Path


除了可以给查询参数添加额外的校验,也可以给路径参数添加额外的校验

Path 的具体教程:https://www.cnblogs.com/poloyy/p/15308131.html

相关文章
FastAPI(54)- 详解 Request 请求对象(上)
FastAPI(54)- 详解 Request 请求对象(上)
538 0
|
JavaScript 前端开发 API
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
459 0
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
Golang:go-querystring将struct编码为URL查询参数的库
Golang:go-querystring将struct编码为URL查询参数的库
179 0
|
IDE 开发工具
FastAPI(6)- 详解 Query (上)
FastAPI(6)- 详解 Query (上)
176 0
FastAPI(6)- 详解 Query (上)
FastAPI(5)- 查询参数 Query Parameters
FastAPI(5)- 查询参数 Query Parameters
225 0
FastAPI(5)- 查询参数 Query Parameters
FastAPI(7)- 详解 Path(上)
FastAPI(7)- 详解 Path(上)
213 0
FastAPI(7)- 详解 Path(上)
|
JSON 数据库 数据格式
FastAPI(46)- JSONResponse
FastAPI(46)- JSONResponse
297 0
FastAPI(46)- JSONResponse
|
JSON JavaScript API
FastAPI(1)- 简单介绍
FastAPI(1)- 简单介绍
274 0
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景
442 0
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景