问题3 django 关于modal序列化最优解

关于modal序列化,生成json数据返回的应该方法是serializers

重点代码:

def se(data):
    """序列化"""
    data = serializers.serialize("json", data, ensure_ascii=False)
    data = json.loads(data)
    return data

上面代码解释

之前的获取json数据的做法,是使用格式化,单个,暂时优化不考虑单个

但是有点不好的是,返回的json数据是有"d"的注释,如果单纯获取数据,那么是要实现解析文本内容,处理一下的。

经过测试,注意到,序列化,然后再json.loads(json_data)得到的对象数据,返回json数据的时候是没有"d"什么的注释。

json_data = serializers.serialize("json", goods, ensure_ascii=False)
json_data = json.loads(json_data)

序列化+加载为对象 =》 解释serializers.serialize("json",goods,ensure_ascii=False)是生成json字符串=>json.loads(json_data)生成对象,JsonResponse(json_data,safe=False)返回值就没有反斜杠了。

注意到的第二点,下面代码中,如果是直接json_data[index]["comment"] = serializers.serialize("json",comments)会有两个反斜杠。

着重的意思就是:序列化是获取的字符串,json字符串是会有反斜杠的,
全部:

from django.shortcuts import render
import json
from django.http import HttpResponse
from django.http import JsonResponse
from goods_deal.models import Students, Goods,GoodsComments
from goods_deal.models_view import ViewGoods
from goods_deal.tools.json_encoder import MyEncoder
#  导入Paginator,EmptyPage和PageNotAnInteger模块
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core import serializers
# Create your views here.


def se(data):
    """序列化"""
    data = serializers.serialize("json", data, ensure_ascii=False)
    data = json.loads(data)
    return data


def get_goods(request):
    """
    功能特点: 获取物品, 物品的评论,评论的评论
    实现分页功能
    :param request:
    :return:
    """
    # 获取参数
    if request.method == 'POST' or 1 == 1:
        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 = se(goods)
        for index, good in enumerate(goods):
            comments = good.GOOD_COMMENTS.all()
            json_comments = se(comments)
            json_data[index]["comments"] = json_comments
        return JsonResponse(json_data, safe=False)
    return None
# JsonResponse(json.dumps(goods, cls=MyEncoder), safe=False)

基于django开发的物品交易网站过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容