zoukankan      html  css  js  c++  java
  • 31)django-序列化

    目录

      1)序列化

      2)为什么不用json序列化

      3)django序列化QuerySet,ErrorDict数据

    一:序列化

      序列化是将对象状态转换为可保持或传输的格式的过程

      反序列化是指将存储在存储媒体中的对象状态装换成对象的过程 

    二:为什么不用json序列化

      json序列化只能序列python自己对象:比如字符串,数据,字典等。但是像时间,django Queryset 或者是ErrorDict类型数据不能直接序列化。

    三:django序列化QuerySet,ErrorDict数据

      1)对QuerySet序列化
      2)ErrorDict序列化
    
    
    
        #1)对QuerySet序列化
        -自定义encoder
        -对models.tb.objects.all()序列化
        #第一种
         django提供序列化
            from django.core import serializers
            v=models.tb.objects.all()
            data=serializers.serialize("json",v)
    
        #第二种
            v=models.tb.objects.all().values("id","name")
            v=list(v)#把Queryset直接转列表
            v=json.dumps(v)
    
            但是如果有ctime类型,就不能直接使用
    
            json.dumps(v,cls="XX")去定制
    
    
        第一种方法把所有字段都列表出了。第二种可以定制,比如只显示name等
    
    
    #2)ErrorDict序列化(也有两种,as_json as_data)
    详细例子:http://www.cnblogs.com/lixiang1013/p/7892181.html
    class JsonCustomEncoder(json.JSONEncoder): from django.core.exceptions import ValidationError def default(self, field): if isinstance(field,ValidationError): return {'code':field.code,'message':field.messages} else: return json.JSONEncoder.default(self,field) def login(request): res={"status":False,"data":None,"error":None} if request.method=="GET": return render(request,"login.html") elif request.method=="POST": obj=LoginForm(request.POST) if obj.is_valid(): print(obj.cleand_data) res["status"]=True else: #res["error"]=obj.errors.as_json() #print(obj.errors.as_data())#errors.as_data()返回的是 ValidationError类型,不是字典,不能直接序列化 res["error"]=obj.errors.as_data() result=json.dumps(res,cls=JsonCustomEncoder)#dumps有个参数cls,可以定制 return HttpResponse(json.dumps(result))
  • 相关阅读:
    Linux命令未找到(command not found),误删Linux path原始路径
    Linux安装JDK1.8
    Python批量修改文件夹内所有json文件中部分内容
    [转]jQuery插件开发精品教程,让你的jQuery提升一个台阶
    使用apache的ab对页面进行压力测试
    http_load压力测试
    php json_encode数据格式化2种格式[]和{}
    PHP接收JSON格式的数据
    新浪短链接API接口示例
    一个提示样式
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7899518.html
Copyright © 2011-2022 走看看