关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。
我们从数据库取出数据的格式有三种:1、all()返回的是QuerySet对象;2、values()返回的是QuerySet对象的字典类型;3、vlaues_list() 返回的QuerySet对象的元组类型
1、第2和第3种都可以在后端通过json.dumps()传递给前端。
******后端获取quesyset对象******* import json ret = models.BookType.objects.all().values('caption') ret = models.BookType.objects.all().values_list('caption') ret=list(ret) result = json.dumps(ret) *******前端ajax****** 前端ajax接受的数据通过JSON.parse(data) 将后端传递的quesyset数据进行转换
2、对于第1种情况:需要serializers将获取的QuerySet对象进行序列化转换才可以传递给前端
*******后端从数据库提取数据********* from django.core import serializers ret = models.BookType.objects.all() data = serializers.serialize("json", ret)#注意serializers只能对QuerySet对象进行序列化转换 *******前端对得到的数据通过JSON.parse(data)进行转换
由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:import json
from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field, date): return o.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field) d=datetime.now()
ds = json.dumps(d, cls=JsonCustomEncoder) #调用基类的用法json.dunmps
上一步相当于:
a=datetime.now()
cls=JsonCustomEncoder()
d=cls.default(a)
ds = json.dumps(d)