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))
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    谈Delphi中SSL协议的应用(好多相关文章)
    DELPHI中IDE宏录制小用
    SQLite数据库的体系结构(翻译自sqlite.org)
    NewPascal(也许只是对FreePascal的一种封装)
    Loongnix 系统(MIPS Linux)
    死锁的解决经历
    获得WCF Client端的本地端口
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7899518.html
Copyright © 2011-2022 走看看