【问题标题】:How to allow List as query params instead of requestbody in pydantic model for fastapi如何在fastapi的pydantic模型中允许List作为查询参数而不是requestbody
【发布时间】:2021-04-29 17:16:39
【问题描述】:

所以我有一个简单的fastapi模型如下:

 from typing import List
 
 from fastapi import Query, Depends, FastAPI
 from pydantic import BaseModel
 
 class QueryParams(BaseModel):
     req1: float = Query(...)
     opt1: int = Query(None)
     req_list: List[str] = Query(...)
 
 
 app = FastAPI()
 @app.post("/test", response_model=QueryParams)
 def foo(q: QueryParams = Depends()):
     return q

使用以下命令:curl -X "POST" "http://localhost:8000/test?req1=1" -d '{["foo"]}'

但是!我需要它额外允许 uri 请求中的参数,如下所示: curl -X "POST" "http://localhost:8000/test?req1=1&req_list=foo"

我知道如果我从 BaseModel 中取出 req_list,然后将它推到函数头中

 from typing import List
 
 from fastapi import Query, Depends, FastAPI
 from pydantic import BaseModel
 
 class QueryParams(BaseModel):
     req1: float = Query(...)
     opt1: int = Query(None)
 
 
 app = FastAPI()
 @app.post("/test", response_model=QueryParams)
 def foo(q: QueryParams = Depends(), req_list: List[str] = Query(...)):
     return q

它会起作用,但有什么方法可以将它保留在基本模型中?

【问题讨论】:

    标签: python fastapi pydantic


    【解决方案1】:

    我想通了:

     from typing import List
     
     from fastapi import Query, Depends, FastAPI
     from pydantic.dataclasses import dataclass
     
     @dataclass
     class QueryParams:
         req1: float = Query(...)
         opt1: int = Query(None)
         req_list: List[str] = Query(...)
     
     
     app = FastAPI()
     @app.post("/test", response_model=QueryParams)
     def foo(q: QueryParams = Depends()):
         return q
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 2022-12-17
      • 2020-05-24
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2023-04-01
      相关资源
      最近更新 更多