FastAPI(6)- get 请求 - 详解 Query
可选参数
上一篇文章讲过查询参数可以不是必传的,可以是可选参数
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的更多相关文章
- AJAX请求详解 同步异步 GET和POST
AJAX请求详解 同步异步 GET和POST 上一篇博文(http://www.cnblogs.com/mengdd/p/4191941.html)介绍了AJAX的概念和基本使用,附有一个小例子,下面 ...
- DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)
PowerBI - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...
- JavaEE基础(03):Http请求详解,握手挥手流程简介
本文源码:GitHub·点这里 || GitEE·点这里 一.Http协议简介 1.概念说明 HTTP超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传 ...
- FastAPI(54)- 详解 Request 请求对象
背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...
- 【Java_Spring】RestTemplate发HTTP请求详解
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解) Spring RestTemplate提交时设置http header请求头 Spring之RestTempla ...
- GET请求与POST请求详解
一.GET请求 常用于获取服务器数据.常见的发起GET请求的方式有:url.href.src.form. 二.GET请求的格式 例子:index.php?userName=harry&pass ...
- 前后端数据交互(四)——fetch 请求详解
fetch 是 XMLHttpRequest 的升级版,使用js脚本发出网络请求,但是与 XMLHttpRequest 不同的是,fetch 方式使用 Promise,相比 XMLHttpReques ...
- FastAPI(7)- get 请求 - 详解 Path
前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和 ...
- HttpClient请求详解
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...
随机推荐
- springboot打包问题
pom.xml <build> <plugins> <plugin> <groupId>org.springframework.boot</gro ...
- 文件流FileStream技术出现的理由漫谈
输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流 ...
- 寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
写在前面 现在已经是八月份了,我已经荒废了半年居多,不得不说谈恋爱确实是个麻烦的事,谈好了皆大欢喜,分手了就是萎靡不振,需要很长一段时间才能缓过来. 人还是要有梦想的,至于实现只不过是一个契机,但凡不 ...
- 【Java】jeesite初始配置以及代码生成工具的使用
jeesite简单使用 首先去技术服务与支持.版本区别一览表 - JeeSite 4.x找到源码下载的部分 JeeSite 源码下载:https://gitee.com/thinkgem/jeesit ...
- Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制
1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你电脑磁盘上的路径 位置:C:\Program Files\Java\jdk1.8.0_112\bin\javah.exe ...
- flutter中显现登录页面成功后跳转的方法
最近在实现页面输入账号跟密码之后跳转到初始页面,一开始用 Navigator.of(context).push(new MaterialPageRoute(builder: () { return n ...
- Spring整合Quartz轻松完成定时任务
一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...
- spring boot集成pagehelper(两种方式)
当spring boot集成好mybatis时候需要进行分页,我们首先添加maven支持 <dependency> <groupId>com.github.pagehelper ...
- Spring详解(十)------spring 环境切换
软件开发过程一般涉及"开发 -> 测试 -> 部署上线"多个阶段,每个阶段的环境的配置参数会有不同,如数据源,文件路径等.为避免每次切换环境时都要进行参数配置等繁琐的操 ...
- 通过location响应头实现重定向
package day08; import java.io.IOException; import javax.servlet.ServletException; import javax.servl ...