python 數據模型轉json 提供給前端(3)


1、模型轉Json時需要對一些特殊格式進行處理 比如金額(decimal)、和時間(datetime)

import json
import datetime
from decimal import Decimal,getcontext

class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        """
        重新 JSONEncoder 轉換方式
        :param obj: 
        :return: 
        """
        if isinstance(obj, Decimal):
            return float(obj)
        elif isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime("%Y-%m-%d")
        else:
            return json.JSONEncoder.default(self, obj)

2、統一模型轉換Json格式,一般給前端的有三個字段,code:返回值代碼 標識返回數據的狀態,msg:返回提示信息,data:返回的數據結果

class ResultModel():
    def __init__(self,code=0,msg="success",data=None):
        """
        :param code: 0 成功,1 失敗
        :param msg: 原因說明
        :param data: 請求結果
        """
        self.code = code
        self.msg = msg

        is_list = data.__class__ == [].__class__
        is_set = data.__class__ == set().__class__
        if(is_set or is_list):
            sub = []
            for item in data:
                a = self.to_dict(item)
                sub.append(a)
            self.data = sub
        else:
            self.data = data

    def to_json(self):
        """
        模型轉換為 json字符串,DateEncoder自定義轉換模式
        :return: 
        """
        return json.dumps(obj=self.__dict__,ensure_ascii=False,cls=DateEncoder)

    def to_dict(self,item):
        """
        字典轉換
        :param item: 
        :return: 
        """
        dict = {}
        dict.update(item.__dict__)
        return dict

 

4、調用 提供給web端,用tornado框架 舉例

t = tsql()
class webHandler(tornado.web.RequestHandler):
    @tornado.web.authenticated
    def get(self, *args, **kwargs):
        try:
            data = t.selectdata()
            _re = ResultModel(data=data)
            self.write(_re.to_json())
        except Exception as e:
            _re = ResultModel(code=1,msg=str(e.args))
            self.write(_re.to_json())

5、_re.to_josn() 結果

{
"code": 0,
"data": [{"price": 22.0, "id": 1, "createtime": "2020-01-07 21:46:34"},
      {"price": 1234567890.22, "id": 2, "createtime": "2020-01-07 21:46:57"},
      {"price": 10.0, "id": 3, "createtime": "2020-01-08 03:12:56"},
      {"price": 10.23, "id": 4, "createtime": "2020-01-08 03:15:52"},
      {"price": 10.24, "id": 5, "createtime": "2020-01-08 03:16:03"},
      {"price": 10.24, "id": 6, "createtime": "2020-01-08 03:18:49"}],
"msg": "success"
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM