FastAPI的一些奇奇怪怪的问题

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/")
async def n(rule: Literal["1", "2", "3"] = Query(...)):
    return rule


import uvicorn

uvicorn.run(app, port=8000)

这实际和pydantic也有关系

如上

curl -X 'GET' \
  'http://localhost:8000/?rule=2' \
  -H 'accept: application/json'

是可以正确请求并返回1

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/")
async def n(rule: Literal[1, 2, 3] = Query(...)):
    return rule


import uvicorn

uvicorn.run(app, port=8000)

把str改成int

curl -X 'GET' \
  'http://localhost:8000/?rule=1' \
  -H 'accept: application/json'

结果返回错误

{
  "detail": [
    {
      "type": "literal_error",
      "loc": [
        "query",
        "rule"
      ],
      "msg": "Input should be 1, 2 or 3",
      "input": "1",
      "ctx": {
        "expected": "1, 2 or 3"
      }
    }
  ]
}

这就很奇怪了,它把他看成str而没有处理成为int再来检验

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/")
async def n(rule: int = Query(...)):
    print(type(rule))
    return rule


import uvicorn

uvicorn.run(app, port=8000)

这样的是没有问题,我们是知道的

fastapi = 0.115.12
pydantic = 2.7.4


python=3.11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值