美文网首页
django序列化

django序列化

作者: 戴维得 | 来源:发表于2017-10-05 22:11 被阅读0次

    django在使用ajax发送数据的时候只能以字符串的形式发送,故而,如果需要发送queryset数据类型的时候是不可以发送的,为此,django使用了一个模块来为此提供支持

    使用erializers模块序列化

    可以序列化queryset类型

    def get_data(request):
        user_list = models.UserInfo.objects.all
        from django.core import serializers
        user_list_str = serializers.serialize('json', user_list)
        return HttpResponse(user_list_str)
    

    使用这种方式虽然简单粗暴,但是会将表名等信息暴露,因此不推荐

    使用json序列化

    def get_data(request):
        user_list = models.UserInfo.objects.val('name', 'pwd')
        user_list = list(user_list)
        val = json.dumps(user_list)
        return HttpResponse(val)
    

    但是json只能处理基础的列表,字典等简单类型,他不能处理时间等复杂类型

    自定义json

    自定制 json.dumps方法中cls参数(serializers内部也是这样实现的)

    vale=json.dumps(userlist,cls=json.JSONEncoder)
    
    from datetime import datetime
    from datetime import date
    import json
    #自定义一个类,由于Python的一数据类型,json可以序列化,所有可以继承json.JSONEncoder方法
    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)
    data_list=[
        {'name':'eric0','age':18,'ctime':datetime.now()},
        {'name':'eric1','age':18,'ctime':datetime.now()},
        {'name':'eric2','age':18,'ctime':datetime.now()}
    ]
    
    str1=json.dumps(data_list, cls=JsonCustomEncoder)
    print(str1)
    

    相关文章

      网友评论

          本文标题:django序列化

          本文链接:https://www.haomeiwen.com/subject/qtnkyxtx.html