django 的序列化

关于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)

猜你喜欢

转载自www.cnblogs.com/dushangguzhousuoli/p/10972518.html