问题2 python 返回的数据集格式化问题 modal to json 和json to modal

modal to json

way 1 Goods.object.get获得的数据集和Goods.object.all获取的数据集

单独的一个,需要去掉多余的_state,和格式化掉日期 obj.__str__,或其他格式化

all的数据集 使用序列化方法serializers.serialize('json', obj)返回对象

使用方法

json_data = json.dumps(querySet, cls=MyEncoder)

格式化方法

单独的获取一个

import json
from datetime import datetime
from django.core import serializers
from django.db.models.base import ModelState  # 多了一个状态
from django.db.models.query import QuerySet  # 集合
class MyEncoder(json.JSONEncoder):
    """
    因为单独的获取数据库内容,不分页的话,需要这么做;用分页,不需要序列化
    """
    def default(self, obj):
        # 格式化日期
        if isinstance(obj, datetime):
            return obj.__str__()
        # 去掉 _state
        if isinstance(obj, ModelState):
            return
        # 格式化查询集合
        if isinstance(obj, QuerySet):
            return serializers.serialize('json', obj)
        if isinstance(obj, bytes):
            return str(obj,encoding='utf-8')
        return json.JSONEncoder.default(self, obj)

way 2 使用分页功能,自己会序列化

        body = {}  # json.loads(request.body)
        current_page = body["current_page"] if "current_page" in body else 0
        length_page = body["length_page"] if "length_page" in body else 10
        goods = Goods.objects.all()
        # 生成paginator对象,定义每页显示多少条记录
        paginator = Paginator(goods, length_page)
        try:
            goods = paginator.page(current_page)
        except PageNotAnInteger:
            goods = paginator.page(1)
        except EmptyPage:
            goods = paginator.page(paginator.num_pages)
        json_data = serializers.serialize("json", goods, ensure_ascii=False)
        return JsonResponse(json_data, safe=False)

json to modal

json.loads(str) 直接映射
文集-基于django开发的物品交易网站过程

你可能感兴趣的:(问题2 python 返回的数据集格式化问题 modal to json 和json to modal)