序列化
#序列化 #- django内置 #- json + 扩展 #关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。
a. 两种方式
#a.serializers: from django.core import serializers ret = models.Server.objects.all() data = serializers.serialize("json", ret) return HttpResponse(data) #浏览器反问 http://127.0.0.1:8000/backend/curd_json.html ------------------结果------------------- 所有的都显示出来 #b. json.dumps ret = models.Server.objects.values("id","hostname") data = json.dumps(list(ret)) return HttpResponse(data) #浏览器反问 http://127.0.0.1:8000/backend/curd_json.html ----------------结果--------------------- [{"hostname": "c2.com", "id": 1}]
b. 由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:
#每个字段都会验证一遍,都会执行default函数 import json from datetime import date from datetime import datetime def curd_json(request): class JsonCustomEncoder(json.JSONEncoder): def default(self, value): #每个字段 if isinstance(value, datetime): return value.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(value, date): return value.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, value) ret = models.Server.objects.values("id","hostname","create_at") data = json.dumps(list(ret),cls=JsonCustomEncoder) #cls是一个类,默认是json.JSONEncoder类 return HttpResponse(data)