FastAPI(11)- 函数参数类型是列表,但不使用 typing 中的 List,而使用 list,会怎么样?

简介: FastAPI(11)- 函数参数类型是列表,但不使用 typing 中的 List,而使用 list,会怎么样?

使用 typing 中的 List、Set、Tuple 的栗子


from typing import Optional
import uvicorn
from fastapi import FastAPI, Body
from typing import List, Tuple, Set
app = FastAPI()
@app.put("/items/{item_id}")
async def update_item(
        list_: List[int] = Body(...),
        tuple_: Tuple[int] = Body(...),
        set_: Set[int] = Body(...),
):
    results = {"list_": list_, "tuple_": tuple_, "set_": set_}
    return results
if __name__ == "__main__":
    uvicorn.run(app="9_typing:app", host="127.0.0.1", port=8080, reload=True, debug=True)


期望得到的请求体


{
    "list_": [
        0,
        1
    ],
    "tuple_": [
        0,
        2
    ],
    "set_": [
        0,
        3
    ]
}


假设里面的元素传了非 int 且无法自动转换成 int


  • typing 的 List、Set、Tuple 都会指定里面参数的数据类型
  • 而 FastAPI 会对声明了数据类型的数据进行数据校验,所以会针对序列里面的参数进行数据校验
  • 如果校验失败,会报一个友好的错误提示

微信图片_20220515141839.png


使用 list、set、tuple 的栗子


用 Python 自带的 list、set、tuple 类,是无法指定序列里面参数的数据类型,所以 FastAPI 并不会针对里面的参数进行数据校验

@app.put("/items/{item_id}")
async def update_item(
        list_: list = Body(...),
        tuple_: tuple = Body(...),
        set_: set = Body(...),
):
    results = {"list_": list_, "tuple_": tuple_, "set_": set_}
    return results


微信图片_20220515141909.png


变成传啥类型的值都可以

 

总结


要充分利用 FastAPI 的优势,强烈建议用 typing 的 List、Set、Tuple 来表示列表、集合、元组类型

相关文章
|
4天前
|
XML 存储 JavaScript
DOM 节点列表(Node List)
XML DOM允许访问XML文档的每个节点,提供三种访问方法:getElementsByTagName()、循环遍历和导航节点关系。getElementsByTagName()返回一个节点列表,类似于数组,可用于获取特定标签名的节点。例如,加载"books.xml"后,`xmlDoc.getElementsByTagName("title")`会获取所有<title>元素,存储在变量x中。通过索引如x[2]可访问第三个<title>元素,注意索引从0开始。后续章节将进一步探讨节点列表(Node List)。
|
1天前
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,加载"books.xml"后,通过getElementsByTagName("title")获取标题节点列表,然后使用`for`循环遍历列表,输出每个标题的文本内容。此代码演示了如何处理XML文档中的节点集合。
|
4天前
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,允许遍历和处理节点。例如,加载"books.xml"到`xmlDoc`,通过`getElementsByTagName("title")`获取所有标题节点,然后使用循环输出每个<title>元素的文本内容。
|
4天前
|
XML 数据格式
节点列表长度(Node List Length)
`NodeList`对象自动更新,其`length`属性表示列表中节点数量。例如,加载"books.xml"后,`getElementsByTagName('title').length`返回`4`。此属性可用来遍历列表,如示例所示,遍历所有`<title>`元素并打印其文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
|
4天前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
4天前
|
XML 数据格式
节点列表长度(Node List Length)
`Node List`对象自动更新,其`length`属性表示列表中节点数量。在给定示例中,代码加载"books.xml",并利用`getElementsByTagName('title')`获取<title>元素的数量,结果为4。`length`也可用于遍历列表,如示例所示,遍历并打印所有<title>元素的文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
|
4天前
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,例如在XML文档中,通过`getElementsByTagName()`获取的所有`<title>`元素的数量。可以遍历这个列表,如示例所示,使用`for`循环访问并输出每个节点的文本值。在提供的实例中,代码加载"books.xml",然后获取并打印所有<title>元素的子节点值。
|
4天前
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
|
4天前
|
存储 索引 Python
多数pythoneer只知有列表list却不知道python也有array数组
多数pythoneer只知有列表list却不知道python也有array数组
27 0
|
4天前
四种解决”Arg list too long”参数列表过长的办法
这些方法都可以帮助你避免因参数列表过长而导致的错误。选择方法取决于具体情况和需求。
16 0