序列化数据的两种方式

#序列化
def test(request):
    from django.core import serializers
    host_list = models.Host.objects.filter(id__lt=5)
    data=serializers.serialize("json",host_list)
    return HttpResponse(data)
def test(request):

    # 序列化2,不支持datetime
    import json
    host_list=models.Host.objects.filter(id__lt=5).values('id','hostname','port')
    data=json.dumps(list(host_list))
    return HttpResponse(data)

json不能序列化queryset类型,需要用values进行转换成列表

json不支持datetime类ing,需要我们添加新功能

import json
from datetime import date
from datetime import datetime

#json.JSONEncoder默认不序列化datetime类型,我们给这个方法添加自定义功能
class CustomEncoder(json.JSONEncoder):
    def default(self, field):
        if isinstance(field, datetime):
            return field.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(field, date):
            return field.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, field)

#每个字典的元素会传入json的JSONEncoder中,如果是datetime类型进行格式化
dic = {
    'k1':'v1',
    'k2':123,
    'ctime':datetime.now()
}
#cls=CustomEncoder会将拿到的元素放到自定义的类中处理,如果不是时间类型用默认的序列化方式
ds = json.dumps(dic,cls=CustomEncoder)
print(ds)

 以后取到任何类型我们都可以用JSONEncoder进行自定义改造。