美文网首页
Flask 数据json序列化(四)

Flask 数据json序列化(四)

作者: andpy | 来源:发表于2018-06-21 15:31 被阅读418次

    Flask 数据json序列化

    Flask对数据直接序列化是有要求,对非常规的数据需要进行特殊配置的操作

    扩展 JSONEncoder

    from datetime import date
    
    from flask.json import JSONEncoder as _JSONEncoder
    from flask import Flask as _Flask
    
    # 类变量是不会存储到 dict中,只有实例变量才可以
    from app.libs.error_code import ServerError
    
    
    # 自定义json 序列化器
    class JSONEncoder(_JSONEncoder):
        def default(self, o):
            if hasattr(o, 'keys') and hasattr(o, '__getitem__'):
                return dict(o)
            if isinstance(o, date):
                return o.strftime('%Y-%m-%d')
            raise ServerError()
    
    
    # 使用自己的 json_encoder 代替falsk 原生的 json_encoder
    class Flask(_Flask):
        json_encoder = JSONEncoder    
    

    使用这种方式必须,重写两个方法
    在base model中

    def __getitem__(self, item):
        return getattr(self, item)
    
    def keys(self):
        return self.fields
    
    #不需要返回的字段
    def hide(self, *keys):
        for key in keys:
            self.fields.remove(key)
        return self
    #需要返回的字段
    def append(self, *keys):
        for key in keys:
            self.fields.append(key)
        return self
    

    在子类mdoel中:定义默认要返回json的字段

    @orm.reconstructor
    def __init__(self):
        self.fields = ['id', 'title', 'author', 'binding',
                       'publisher',
                       'price','pages', 'pubdate', 'isbn',
                       'summary',
                       'image']
    

    Python json 序列化相关

    python可以直接序列化字典 dict

    d ={'name':'flask'}
    

    序列化对象属性不包含对象的实例:

    class Demo:
        self.name ='falsk'
        self.age =34
    //直接使用 __dict__
    
    demo.__dict
    

    序列化对象属性含有对象的实例:使用自定义函数
    这种思想在 sorted,filter中都有实现,将本身不能实现的规则抛出来,让比人自己实现。

    class Demo
        self.name ='flask'  
        self.name =Object
    
    // 直接使用json 中dumps 函数中的 default属性,将不可以序列化的对象转换为可以序列化的字典
    json.dumps(books, default=lambda o: o.__dict__)
    

    相关文章

      网友评论

          本文标题:Flask 数据json序列化(四)

          本文链接:https://www.haomeiwen.com/subject/oozqyftx.html