【问题标题】:Flask organize marshmallow schemasFlask 组织棉花糖模式
【发布时间】:2020-02-28 00:15:16
【问题描述】:

我正在Flask framework 开发 API,并且越来越大。现在我有几十个 sqlalchemy 模型和更多 Marshmallow CRUD 模式。

事情变得有点混乱且难以维护,主要是模式,所以我对在更大的 Flask 应用程序中组织整个结构的最佳方法有疑问,以及在端点中更好地维护的序列化方法是:

  • 嵌套的 json 响应
/v0/user/all

{ 
   "data":{ 
      "id":1,
      "name":"foo",
      "phone":"927487286",
      "courses":[ 
         { 
            "id":12,
            "name":"Math",
            "place":{ 
               "id":1,
               "location":"Foo Street"
            }
         }
      ]
   }
}
  • 可以使用在不同端点中使用的架构,但具有不同的字段
/v0/courses/{id}

{ 
   "data":{ 
      "id":12,
      "name":"Math",
      "place":{ 
         "location":"Foo Street"
      }
   }
}

我正在考虑在我的模型中实现方法 to_dict,但是当涉及到嵌套在另一个序列化程序中时,这些方法也很难维护。

有什么建议吗?

【问题讨论】:

  • 请更新您的问题以包含您当前的目录结构、您的模型和当前序列化程序的示例。

标签: python flask serialization sqlalchemy marshmallow


【解决方案1】:

marshmallow 的重点是通过将视图责任委托给 Schema 来避免对象中的 to_dict 方法。请参阅 Steven Loria(棉花糖作者)的 this presentation

如果您的 API 架构接近您的数据库结构,您可以通过使用 marshmallow-sqlalchemy 从模型自动生成 API 架构来限制重复。

如果 API Schema 与模型的差异太大,那么最好为每个资源从头开始构建一个 Schema。您仍然可以使用 marshmallow-sqlalchemy 中的 field_for 方法来避免重复模型类型和验证器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2018-09-28
    • 1970-01-01
    • 2023-03-17
    • 2019-12-06
    • 2019-11-04
    相关资源
    最近更新 更多