Arj*_*man 3 python mongoengine flask flask-restful marshmallow
我正在使用Flask-RESTful在 Python 中编写一个简单的 REST API ,他们的文档说他们计划弃用对象序列化 (reqparse),转而使用像Marshmallow这样的序列化程序 我的 API 正在使用Flask MongoEngine 从 MongoDB 文档存储中读取和写入。
我非常感谢一个用例的示例,在该用例中,我选择使用外部序列化器(例如 Marshmallow),而不是 Document 对象上的 MongoEngine 内置序列化器。
本质的区别在于marshmallow 进行了验证。
\n您不只是从互联网上获取任何数据并将其填充到数据库中。验证可防止输入错误数据(恶意或错误)。即使数据来自受信任的用户,验证它以确保数据库完整性也是一个好主意。
\nMarshmallow 与 Flask-restplus 一样,提供的验证器不仅可以验证类型,还可以验证值(数字的最小/最大长度、字符串的最小/最大长度、日期的最小/最大长度等,您甚至可以创建自己的验证器)。
\n此外,API 并不总是全部都是 CRUD。API 和 DB 之间可能存在一些业务代码,对于这些代码来说,使用 Python 对象会很好。Mongo 的 BSON 解析器不会这样做。
\nMongoEngine提供了验证,但它是在DB之前,而验证应该在进入API时进行。
\n顺便说一句,flask-restful 中的内部[反|]序列化已经被预定弃用一段时间了,而且事情似乎陷入了停滞(GH Issue #9)。我认为有人使用flask-restplus + marshmallow,所以这可能是一种可行的方法。
\n这是一个替代方案:
\n这个库组合不像整体式flask-restplus那么成熟和特色,但是使用marshmallow很好,因为它是一个很棒的库并且因为DRY ness。
\n\xc2\xb5Mongo 是基于 marshmallow 的 MongoEngine 的替代品,因此它就像包含 marshmallow-mongoengine 的 MongoEngine。
\n它的文档有一个模式,说明了验证的不同阶段:客户端和业务对象之间的 API,以及对象和数据库之间的 ODM。
\n(免责声明:marshmallow、webargs、apispec 和flask-rest-api 维护者、\xc2\xb5mongo、mongoengine 和flask-mongoengine 贡献者。)
\n| 归档时间: |
|
| 查看次数: |
4214 次 |
| 最近记录: |