在实现Django的后端和微信前端的交互过程中,后端传递的数据是一个列表或者字典格式,但是经过HttpResponse发送到网页或者微信小程序后端变成了字符串,这个时候需要用json来进行处理。
(1)对字典的序列化
序列化:把python的dic转化为str的类型的过程
反序列化:把str类型转化为python 的dic类型的过程
all_tickets = {'1':total_num,'2':sn_ticket_duty}
all_tickets = json.dump(all_tickets)
return HttpResponse(all_tickets)
网页端结果如下所示:
(2)json对列表的序列化和反序列化
列表的序列化和反序列化跟字典的原理相同
(3)json对元组的序列化和反序列化
元组序列化之后是字符串,但是反序列化之后却是列表
(4)json对文件的序列化和反序列化
序列化:把服务端的响应数据写入到文件中,是dump(),不是dumps()
json.dump(要写入的内容,文件名)
反序列化:读取文件的内容,是load(),不是loads()
django提供的序列化
from django.http import JsonResponse
from django.shortcuts import render, HttpResponse
from django.core import serializers
user_obj = User.objects.filter(pk=id)
json_data = serializers.serialize('json', user_obj)
json_data = json.loads(json_data)
return JsonResponse(json_data, safe=False)
复杂的设计到分页的json序列化
from django.core.paginator import Paginator
def Article(request):
page_num = request.GET.get('page')
row_num = request.GET.get('rows')
print(page_num, row_num)
rows = []
chapter = Chapter.objects.all()
all_page = Paginator(chapter, row_num)
page = Paginator(chapter, row_num).page(page_num).object_list
page_data = {
"total": all_page.num_pages,
"records": all_page.count,
"page": page_num,
"rows": rows
}
for i in page:
rows.append(i)
def myDefault(u):
if isinstance(u, Chapter):
return {'id': u.id,
'title': u.name,
'size': u.size,
'duration': u.duration,
'download_url': "不能下载",
"audiopath": str(u.audiopath)
}
data = json.dumps(page_data, default=myDefault)
return HttpResponse(data)