序列化

序列化

#序列化
   #- 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)
View Code

 

  

posted @ 2017-08-04 19:37  karina梅梅  阅读(167)  评论(0编辑  收藏  举报