FastAPI-11:函数参数类型是list参数


FastAPI-11:函数参数类型是list参数

函数参数类型是列表,但不使用typing中的list,而使用list,会怎样?

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

from typing import Optional, List, Tuple, Set
import uvicorn
from fastapi import FastAPI, Body
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='ninth-9:app', host='0.0.0.0', port=8080, debug=True)

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

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

使用list、set、tuple的栗子

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

@app.put('/item/{item_id}')
async def update_item(
    list_: list = Body(...),
    tuple_: tuple = Body(...),
    set_: set = Body(...),
):
    results = {'list_': list_, 'tuple_': tuple_, 'set_': set_}
    return results
# 这样就变成了传啥类型的值都可以了

示例:

总结

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


文章作者: 刘宇亭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 刘宇亭 !
评论
  目录