• 【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)
    


  • 相关阅读:
    Mac系统杂项 (持续更新)
    黑苹果-IOS学习的开始
    WPF命令参数CommandParameter
    WPF使用RoutedCommand自定义命令
    解决iOS设备屏幕切换时页面造成的问题
    width100%,设置padding或border溢出解决方法
    linux下别名alias的设置
    cordova navigator app 对象
    jquery easyui combox实用方法记录
    seajs构建方法
  • 原文地址:https://www.cnblogs.com/zyk01/p/10176344.html
Copyright © 2020-2023  润新知