可选参数

上一篇文章讲过查询参数可以不是必传的,可以是可选参数

from fastapi import FastAPI
from typing import Optional
import uvicorn app = FastAPI() # 必传参数+可选参数
@app.get("/items")
async def read_item(item_id: str, name: Optional[str] = None):
return {"item_id": item_id, "name": name} if __name__ == "__main__":
uvicorn.run(app="4_get_valiation:app", host="127.0.0.1", port=8080, debug=True, reload=True)

postman 请求结果

可选其实也是一种校验

Query

为了对查询参数进行额外的校验,可以导入 Query 库

Query 支持多种校验

可选参数有默认值+长度最大为 10

# 需要先导入 Query 库
from fastapi import Query @app.get("/itmes/")
async def read_items(name: Optional[str] = Query(default=None, max_length=10)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if name:
results.update({"name": name})
return results

不传 name 的请求结果

传了 name,校验成功的请求结果

name 长度大于 10,校验失败的请求结果

友好的错误提示啊!!直接说清楚哪个字段长度不满足了...

name: Optional[str] = Query(None) 等价于

name: Optional[str] = None

Optional 的作用

为了让 IDE 更好的支持智能提示

一个参数多个校验

# 多条校验
@app.get("/items/twice")
async def read_items(name: Optional[str] = Query(default=None, min_length=3, max_length=10)):
return {"name": name}

校验成功的请求结果

name 长度小于 3,校验失败的请求结果

添加正则表达式校验

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

校验成功的请求结果

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

查看 Swagger API 文档

正则表达式教程

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

必传参数+长度最小为 3

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

不指定默认值就行

name: str

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

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

# 必传参数
@app.get("/items/require")
async def read_items(name: Optional[str] = Query(default=..., max_length=10)):
return {"name": name}

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

校验成功的请求结果

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

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

查看 Swagger API 文档

大大的 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}

没有传参的请求结果

取 address 默认值 []

正确传参的请求结果

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

校验失败的请求结果

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

查看 Swagger API 文档

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

@app.get("/list/default")
async def read_item(address: Optional[List[str]] = Query(["广州", "深圳"])):
return {"address": address}

不传参的请求结果

元数据

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 进行传参的请求结果

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

用 alias 进行传参的请求结果

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

查看 Swagger API 文档

唯独没看到 title 去哪了,估计 title 字段是无用的

总结

限定于字符串的校验:

  • min_length
  • max_length
  • regex

Path

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

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

 

FastAPI(6)- get 请求 - 详解 Query的更多相关文章

  1. AJAX请求详解 同步异步 GET和POST

    AJAX请求详解 同步异步 GET和POST 上一篇博文(http://www.cnblogs.com/mengdd/p/4191941.html)介绍了AJAX的概念和基本使用,附有一个小例子,下面 ...

  2. DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)

    PowerBI  - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...

  3. JavaEE基础(03):Http请求详解,握手挥手流程简介

    本文源码:GitHub·点这里 || GitEE·点这里 一.Http协议简介 1.概念说明 HTTP超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传 ...

  4. FastAPI(54)- 详解 Request 请求对象

    背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...

  5. 【Java_Spring】RestTemplate发HTTP请求详解

    Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解) Spring RestTemplate提交时设置http header请求头 Spring之RestTempla ...

  6. GET请求与POST请求详解

    一.GET请求 常用于获取服务器数据.常见的发起GET请求的方式有:url.href.src.form. 二.GET请求的格式 例子:index.php?userName=harry&pass ...

  7. 前后端数据交互(四)——fetch 请求详解

    fetch 是 XMLHttpRequest 的升级版,使用js脚本发出网络请求,但是与 XMLHttpRequest 不同的是,fetch 方式使用 Promise,相比 XMLHttpReques ...

  8. FastAPI(7)- get 请求 - 详解 Path

    前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和 ...

  9. HttpClient请求详解

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

随机推荐

  1. 关于TreeSet集合的理解

    TreeSet 集合主要是实现了Collection集合的实现类,主要框架为: 1. Set接口的框架: |----Collection接口:单例集合,用来存储一个一个的对象 |----Set接口: ...

  2. CodeReview of JDK Source Code

    jdk1.6.0_35/src.zip, only java package is reviewd(full package review caused a OutofMemory on java h ...

  3. 成为编程大牛很简单,把这些书看个八成就OK

    原文链接:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍 ...

  4. MySQL-05-DDL/DCL/DML语句

    DDL数据定义语言 库定义 1 创建数据库 mysql> create database school; mysql> create schema sch; mysql> show ...

  5. Python语言系列-01-入门

    python的出生与应用 #!/usr/bin/env python3 # author:Alnk(李成果) """ 1,python的出生与应用 python的创始人为 ...

  6. Java中的形式参数和实际参数

    一.概念 1.形式参数: 就是在定义函数或过程的时候命名的参数. 通俗讲就是一个记号. 2.实际参数: 就是在执行时,调用函数或过程时,传递给函数或过程的参数. 通俗讲就是实际值. 3.参数: 就是一 ...

  7. 一篇文章搞懂密码学基础及SSL/TLS协议

    SSL协议是现代网络通信中重要的一环,它提供了传输层上的数据安全.为了方便大家的理解,本文将先从加密学的基础知识入手,然后展开对SSL协议原理.流程以及一些重要的特性的详解,最后会扩展介绍一下国密SS ...

  8. DVWA(五):CSRF 全等级跨站请求伪造

    CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面 ...

  9. ARM的九种寻址方式

    文章目录 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 4.寄存器偏移寻址 5.寄存器基址变址寻址 6.批量寄存器寻址 7.相对寻址 8.堆栈寻址 9.块拷贝寻址 寻址方式就是CPU根据指令中的 ...

  10. 一款优秀的国产性能测试工具kylinPET在麒麟操作系统上的能力表现

    一直以来人们从事性能测试,使用最多的是Jmeter和LoadRuner .笔者在网上找了一下国产性能测试工具,从中筛选出一款优秀的国产的性能测试工具kylinPET.查找该款工具的历史,好像有十年历史 ...