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

如何在FastAPI中禁用模式检查?

宰父衡
2023-03-14

我正在将一个服务从Flask迁移到FastAPI,并使用Pydantic模型来生成文档。但是,我对模式检查有点不确定。我担心会有一些意想不到的数据(如不同的字段格式),它会返回一个错误。

在Pydantic文档中,有一些方法可以在不检查模式的情况下创建模型:https://Pydantic-docs . help manual . io/usage/models/# creating-models-without-validation

然而,由于这显然是由FastAPI自己实例化的,我不知道如何在从FastAPI返回时禁用这种模式检查。

共有3个答案

充小云
2023-03-14

FastAPI不强制执行任何类型的验证,所以如果您不想这样做,请不要使用Pydantic模型或类型提示。

app.get('/')
async def your_function(input_param):
  return { 'param': input_param }

# Don't use models or type hints when defining the function params.
# `input_param` can be anything, no validation will be performed.

但是,正如@Tryph正确指出的那样,由于您使用 Pydantic 来生成文档,因此您可以简单地使用 Any 类型,如下所示:

from typing import Any
from pydantic import BaseModel

class YourClass(BaseModel):
    any_value: Any

请注意,任何类型也接受,因此实际上该字段是可选的。(另请参阅Pyd

桓嘉谊
2023-03-14

您可以将请求模型设置为<code>类型。听写或键入。列表

from typing import Dict

app.post('/')
async def your_function(body: Dict):
  return { 'request_body': body}

孙熠彤
2023-03-14

您可以直接返回响应,或者使用自定义响应进行自动转换。在这种情况下,响应数据不会根据响应模型进行验证。但是您仍然可以在OpenAPI的附加响应中描述它。

例:

class SomeModel(BaseModel):
    num: int


@app.get("/get", response_model=SomeModel)
def handler(param: int):
    if param == 1:  # ok
        return {"num": "1"}
    elif param == 2:  # validation error
        return {"num": "not a number"}
    elif param == 3:  # ok (return without validation)
        return JSONResponse(content={"num": "not a number"})
    elif param == 4:  # ok (return without validation and conversion)
        return Response(content=json.dumps({"num": "not a number"}), media_type="application/json")
 类似资料:
  • 我的: 编辑:我的: 我还尝试添加。 任何帮助都很感激。谢了! ...是的,我已经在配置更改后重新启动了守护进程。:)

  • 我是android环境的新手。我知道iOS可以在Xcode中完成来禁用设备定向。如何在React Native Android中禁用横向模式或任何定向模式? 多谢了。

  • BottomNavigationView不显示非活动菜单标题。 如何在BottomNavigationBar中显示所有菜单元素的标题?问题是在我的例子中只显示了被点击的元素的标题。

  • 问题内容: 我正在使用urllib.request.urlretrieve将文件下载到本地。 它引发错误: ssl.CertificateError了未处理由用户代码消息:主机名“foo.net”不匹配的“a248.e.akamai.net”,“要么 _.akamaihd.net”,“ .akamaihd-staging.net”,’ 。 akamaized.net”,“_ .akamaized-

  • 问题内容: 我的目标是使用的Android 4.0中的REST Web服务。除非我尝试执行某些操作,否则此方法效果很好。这是相关的代码部分: 这将引发以下异常: 通过调试,我意识到通过的输出流是类型的,并且通过挖掘Android源代码,我发现如果需要重试请求(无论出于何种原因),它就会抛出上述异常,因为它指出了这一点。是 不是 用它想在那里。 现在的问题是:如何使HttpsURLConnectio

  • 我不知道如何使Tkinter变灰。 我试着使用,但它不起作用,我得到一个错误,说 _特金特。TclError:错误选项“-enable”:必须是-column、-columnspan、-in、-ipadx、-ipady、-padx、-pady、-row、-rowspan或-sticky 如何临时禁用?