码迷,mamicode.com
首页 > 其他好文 > 详细

【Django】序列化 񬹈

时间:2019-08-17 12:49:29      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:str   无法   不能   就是   import   imp   http   django   encode   

原文: http://blog.gqylpy.com/gqy/273

"
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)


"

原文: http://blog.gqylpy.com/gqy/273

【Django】序列化 񬹈

标签:str   无法   不能   就是   import   imp   http   django   encode   

原文地址:https://www.cnblogs.com/gqy02/p/11367990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!