marshmallow:Python 对象序列化,一个库就够了
文章目录marshmallowPython 对象序列化一个库就够了1、 这玩意儿是干嘛的2、 为什么要用它3、 怎么用4、 适合哪些人用marshmallowPython 对象序列化一个库就够了marshmallow 在 GitHub 上已经拿到 7,240 Star 了。这是一个 ORM/ODM/框架无关的 Python 库核心功能就是一件事把复杂数据类型比如对象和原生 Python 数据类型做互相转换。你从数据库查出对象要返回给前端ORM 返回的是 model 对象不能直接 JSON 序列化。手动挨个字段写 dict写多了手疼。1、 这玩意儿是干嘛的就一件事序列化和反序列化附带输入校验。定义一套 Schema字段名称和类型声明清楚dump一下出 dict再 render 成 JSON。前端传数据回来load一下又变回对象。日期格式、嵌套关系、字段校验都在 Schema 里声明完事。2、 为什么要用它写过 API 的人都懂一个 User 对象十几个字段外键关联了 Profile、Settings手动序列化每加一个字段就得改两处。日期格式要不要转字符串嵌套对象怎么展开前端传过来的数据合不合法这些边界情况堆在一起序列化代码很快就变成浆糊。marshmallow 用 Schema 声明式描述数据结构嵌套关系用fields.Nested搞定日期自动格式化输入自动校验。代码量和心智负担都降下来了。3、 怎么用核心就是定义 SchemafrommarshmallowimportSchema,fieldsclassArtistSchema(Schema):namefields.Str()classAlbumSchema(Schema):titlefields.Str()release_datefields.Date()artistfields.Nested(ArtistSchema())albumdict(artistdict(nameDavid Bowie),titleHunky Dory,release_datedate(1971,12,17))schemaAlbumSchema()resultschema.dump(album)# {artist: {name: David Bowie},# release_date: 1971-12-17,# title: Hunky Dory}Schema 同时承担序列化、反序列化、校验三个角色一个定义到处用。安装pipinstall-Umarshmallow4、 适合哪些人用写 Python Web API、需要频繁做对象序列化的开发者用 Flask、Django、FastAPI需要独立序列化层的人项目中涉及复杂嵌套数据和多字段校验的场景发者用 Flask、Django、FastAPI需要独立序列化层的人项目中涉及复杂嵌套数据和多字段校验的场景