当前位置: 首页 > 知识库问答 >
问题:

有没有办法在 FastAPI 中为选定的请求参数生成请求模型?

章岳
2023-03-14

我有一个枚举类来存储一些像这样的分类值。

class Fields(str, Enum):
    text   = "text"
    para   = "para"
    images = "images"

每种类型都有pydantic模型。例如:

class imageModel(BaseModel):
    min_width       : int
    max_height      : int
    is_exact        : int
    is_proportional : int
    default_mode    : int
    default_quality : int

我有这样的字典:

type_attrs = {
    "text": textModel,
    "para": ParaModel,
    "image": imageModel
}

我有一个FastAPI路由,用户需要输入字段类型名称作为字符串(从FastAPI文档中的下拉列表),并根据选择的类型提供类型属性。如果用户选择type=“images”,则会提供相应的pydantic模型“ImageModel”供用户填写,以此类推。

选择类型名称后,有没有办法产生对应的pydantic模型?

谢谢你。

共有2个答案

夏侯嘉荣
2023-03-14

您可以将UnionList与您的

从留档:

您可以将响应声明为两种类型的联合,这意味着响应将是这两种类型中的任何一种。

使用联合

from typing import Union

@app.get("/my_path", response_model=Union[FirstModel, SecondModel])

使用列表

from typing import List

@app.get("/my_path", response_model=List[FirstModel, SecondModel])
陶烨赫
2023-03-14

我认为FastAPI不能支持这种类型的功能。基本上,您需要的是基于Fields枚举的输入进行动态swagger模型渲染。我认为,这需要一个钩到招摇的页面上。基本上,整个swagger页面是在api运行时静态构建的。我建议您将Fields枚举拆分为同一路径上的不同路径。

class imageModel(BaseModel):
    min_width: int
    max_height: int
    is_exact: int
    is_proportional: int
    default_mode: int
    default_quality: int


@app.post("/image")
def image(image: imageModel):
    print(image)
    return None
 类似资料:
  • 问题内容: 这个想法是在某些情况下从另一个来源获取数据,所以我有这个存根: 失败了 [$ injector:cdep]找到循环依赖项:拦截器<-$ http 还尝试注入$ injector并使用它获取$ http,结果相同。有任何想法吗? .config就是声明: 问题答案: 注入到: 用它来获取回调函数中返回的对象。 这是一个例子

  • 问题内容: 我正在尝试在机器上安装python 。当我尝试将软件包安装为时。我收到以下错误。 然后我按我的方式提出并安装了请求。但是仍然无法安装。请让我知道我在做什么错误。在此先感谢 问题答案: 该库需要Python 3.3或更高版本 : 要求 […] 第一个软件要求是Python 3.3或更高版本。使用该库是必需的。 和从Trove分类器: 编程语言:: Python 编程语言:: Python

  • 今天调用了一个接口,接口要求传一个日期过去,当时没仔细看(因为文档也没写请求参数和相应参数),以为是传一个data,里面有条件查询的参数之类的,结果第一次报错。 Required request parameter 'date' for method parameter type String is not present(方法参数类型字符串所需的请求参数“日期”不存在) 后面第二次调用的时候注意

  • 我正在使用JSF2.2,并配置了servlet过滤器。过滤器中工作的部分代码: 如果我添加第二个param-常规请求可以工作(发生重定向并看到两个param),但AJAX请求不能工作(没有重定向,什么也不发生)。以下是Firebug报告: 这是如何造成的,我们如何在filter中为AJAX调用设置多个参数?

  • 问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。

  • 问题内容: 我已经构建了一种通过$ http返回资源的复杂方法。 该方法返回一个Promise,然后检查资源是否存在我的本地缓存。如果这样做,它将返回缓存的资源,否则,将发出$ http请求。在资源被缓存后,这种方法效果很好,但是在整个应用程序中,我有多种功能正在按此方法加载,并且每个函数都会发出http请求,因为资源尚未返回和缓存。 我想出了一个简单的检查方法来解决此问题,但我觉得应该有一个更好