关于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)
网友评论