zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【python】避坑指南:fastapi定义请求体应该是字符串但实际变成了list

PythonList 指南 字符串 请求 定义 应该 实际
2023-09-11 14:22:09 时间

今天在写接口的时候遇到一个尴尬的现象,定义的ItemObj作为post请求体应该是一个字典(dict),
期待如下:

{
  "sn": 0,
  "id":0,
  "name": "string"
}

first code :

from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()

class Infos(BaseModel):
    sn: int = None,
    id: int = None,
    name: str



@app.post(path='/')
async def demo(info: Infos):

    return {"msg": "wsw"}


if __name__ == '__main__':
    import os
    import uvicorn

    name_app = os.path.splitext(os.path.basename(__file__))[0]
    uvicorn.run(app=f"{name_app}:app", host="127.0.0.1", port=8066, reload=True)

一个规规矩矩的字典的要求而已,
但是实际中怎么都不是,而且格式还很诡异,前几个是列表形式,最后一个正常的了,形如下:

{
  "sn": [
    null
  ],
  "id": [
    null
  ],
  "name": "string"
}

在这里插入图片描述

sencode code

from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()

class Infos(BaseModel):
    sn: int = None
    id: int = None
    name: str



@app.post(path='/')
async def demo(info: Infos):

    return {"msg": "wsw"}


if __name__ == '__main__':
    import os
    import uvicorn

    name_app = os.path.splitext(os.path.basename(__file__))[0]
    uvicorn.run(app=f"{name_app}:app", host="127.0.0.1", port=8066, reload=True)

在这里插入图片描述

对比了之前的代码感觉方式都是一样,而且也没啥复杂操作就是不行,实在是太邪门了,各种疑问在脑海浮现,哎。。。。。。
废了半天劲都没搞清楚是哪里的问题,还看了了几篇文章还是没有发现任何思路,不知道哪里来了一个feel,就是定义Infos类的时候每项后面都有一个逗号,会不会是这个看不起眼的逗号搞的鬼,下意识感觉问题只能出在这了,别的地方没有理由出错了。
现在不得不把逗号去掉,重新运行一下,果不其然还真是这里的问题,前后花费差不多耗费40分钟,各种无助的内心style太煎熬了,好在问题得到的根本性的解决,实在是太粗心了,在这里记录下

喜欢就给个关注,哈哈哈~~~~~~