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开发的物品交易网站过程