【Django】序列化

"***
Django中序列化主要应用于将数据库中检索的数据返回给客户端用户,特别是Ajax请求一般返回为Json格式。


1、from django.core import serializers

from django.core import serializers

def test01(request):
    user_list = models.User.objects.all()  # 获取所有用户信息
    data = serializers.serialize('json', user_list)  # 指定json序列化
    return HttpResponse(data)
    
"""
网页中显示的内容如下:
[{
	"model": "blog.user",
	"pk": 1,
	"fields": {
		"name": "zyk01",
		"sex": "男"
	}
}]
"""
# 住:pk字段就是id

可见,此方法返回的数据中包含数据表名称:"model": "blog.user",
并且,此方法不能很好的序列化外键关系,序列化外键得到的是id.
所以,此方法不安全,不推荐使用.


2、json.dumps

import json

def test02(request):
    user_list = models.User.objects.all().values('pk', 'name', 'sex')
    # .values('pk', 'name', 'sex'):json不可序列化对象,所以需要加上values
    data = json.dumps(list(user_list))
    return HttpResponse(data)
    
"""
网页中显示的内容如下:
[{"pk": 1, "name": "zyk01", "sex": "u7537"}, {"pk": 2, "name": "zyk02", "sex": "u7537"}]
"""

json本身无法序列化对象,但可以通过自定义处理器来扩展,如下:

class JsonCustomEncoder(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)

# 调用:
now_datetime = json.dumps(datetime.now(), cls=JsonCustomEncoder)


"

原文地址:https://www.cnblogs.com/zyk01/p/11376099.html