flask序列化框架之marshmallow详解

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

marshmallow

https://marshmallow.readthedocs.io/en/latest/

marshmallow是一个ORM / ODM /与框架无关的库,用于将复杂的数据类型与Python数据类型相互转换

简而言之,用以实现序列化反序列化


pip3 install -U marshmallow

序列化

序列化首先需要对应model模型类建立序列化类对象

from marshmallow import Schema, fields

class UsersSchema(Schema):
    id = fields.Integer()
    name = fields.String()

序列化使用schema中的dump()dumps()方法

  • dump: 实现obj -> dict

  • dumps: 实现 obj -> string

由于Flask能直接序列化dict,所以通常Flask与Marshmallow配合序列化时,用 dump()方法即可


使用序列化器对象,首先初始化序列化类对象实例,然后使用dump方法即可,如果是多条数据,那么可以加上many=True参数

class Index(Resource):
    schmea = UsersSchema()

    def get(self):
        model = Users.query.all()
        data = self.schmea.dump(model, many=True)
        return data

反序列化

反序列化基于schema中的load()loads()方法

  • load: 方法将一个传入的dict,结合schema的约定,再转换为一个dict

  • loads: 方法的传入参数是json格式的string,同样将传入数据转换为符合规范的dict

调用loadloads方法时,会执行下面提到的数据校验,所以在开发RESTful API时,对传入数据执行loadloads方法是必要的


user = {
  	"name": "test",
}
data = self.schmea.load(user)
return data

如果希望不只是反序列化成为个简单的字典,而是直接成为数据库的一条数据,那么需要重新定义反序列化对象的方法,并且使用post_load装饰器装饰

from marshmallow import Schema, fields, post_load

class UsersSchema(Schema):
    id = fields.Integer()
    name = fields.String()

    @post_load
    def make_user(self, data, **kwargs):
        user = Users(**data)
        db.session.add(user)
        db.session.commit()
        return user

这样每次调用load()方法时,会按照make_user的逻辑,返回一个User类对象

schema = UsersSchema()
user = {
  "name": "test"
}
data = schema.load(user)  # 这就是反序列化操作

还支持多数据批量反序列化

user1 = User(name="Mick", email="mick@stones.com")
user2 = User(name="Keith", email="keith@stones.com")
users = [user1, user2]
schema = UserSchema(many=True)
result = schema.dump(users)

读写分离字段

要想实现read_onlywrite_only属性来区别字段在使用过程中是否用于反序列化或序列化,可以通过dump_onlyload_only来完成

class UserSchema(Schema):
    name = fields.Str()
    # password is "write-only"
    password = fields.Str(load_only=True)
    # created_at is "read-only"
    created_at = fields.DateTime(dump_only=True)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安卓6.0(也称为安卓 Marshmallow)是谷歌推出的一代安卓操作系统版本。卡刷包是指可以通过刷机的方式将新的操作系统版本升级或者降级至设备上。在刷机过程中,用户需要将卡刷包文件传输至设备,并通过特定的刷机工具进行刷机操作。 在安卓6.0系统中,卡刷包是一种常见的刷机方式。用户可以通过下载相应的卡刷包文件,将其传输至设备的存储空间中。然后,用户需要进入设备的刷机模式,并通过特定的刷机工具选择并刷入卡刷包文件,完成操作系统版本的刷机。 卡刷包常用于解决设备上的软件问题或者提供设备更好的稳定性性能。通过刷入新的卡刷包文件,用户可以获得最新的操作系统更新和修复。同时,卡刷包也可以用于提供一些第三方ROM固件,这些固件通常会增加新的功能或者改善整体系统性能。 要安全刷入卡刷包,用户需要注意以下几点: 1. 确保卡刷包文件的来源可靠,最好从官方或者信任的渠道下载。 2. 掌握正确的刷机教程,按照教程进行刷机操作,避免不正确的操作导致设备损坏。 3. 在刷机前备份设备中的重要数据,以防刷机过程中数据丢失。 4. 注意设备的电量,刷机过程中设备应保持足够电量,以免因电池耗尽导致刷机失败。 5. 如果不熟悉刷机操作,建议寻求专业人士的帮助或者参考相关论坛和社区中的经验分享。 总之,安卓6.0的卡刷包是一种将新的安卓操作系统版本或者第三方ROM固件刷入设备的方式。通过谨慎操作并注意相关事项,用户可以安全地进行刷机操作,享受到更好的系统性能和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李恩泽的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值