#序列化 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进行自定义改造。