序列化

序列化

#序列化
   #- 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-02 08:38  golangav  阅读(206)  评论(0编辑  收藏  举报