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))
31)django-序列化的更多相关文章
- 通过ajax GET方式查询数据,Django序列化objects
点击“查找2”按钮,通过ajax GET方式进行查询数据,这样页面不需要整体刷新,之后清空tbody数据,将查询结果重新附加到tbody 前端html: <div class="box ...
- Django序列化
一.Django序列化 1.序列化应用场景 1.关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,由于httpresponse只能返回字符串或者是字节,而从数据库 ...
- Django序列化&django REST framework
第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django 序列化
序列化 背景 对于Django 的queryset 对象在传递给 前端的时候,前端是无法识别的 因此需要存在一个转换过程将 queryset 对象转换成 字符串前端才可以识别 演示 QuerySet ...
- Django(序列化、SweetAlert插件)
day72 参考:https://www.cnblogs.com/liwenzhou/p/8718861.html#autoid-6-1-2 前端序列化 后端序列化 day73中 补充一个SweetA ...
- django序列化 serializers
Django的序列化工具让你可以将Django的模型‘翻译’成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 一.序列化数据 Django为我们提供了一个强大 ...
- django序列化单表的4种方法的介绍
这里主要是讲序列化单表的几种方法 先看下models中设计的表结构 from django.db import models # Create your models here. class Book ...
- Django 序列化三种方式 对象 列表 元组
1.xuliehua.html <html lang="en"> <head> <meta charset="UTF-8"> ...
- Python菜鸟之路:Django 序列化数据
类型一:对于表单数据进行序列化 这时需要用到ErrorDict. ret['errors'] = obj.errors.as_data() result = json.dumps(ret, cls=J ...
随机推荐
- 解决chrome浏览器在win8下没有注册类的问题
解决chrome浏览器在win8下没有注册类的问题 新建一个txt,里面存放代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SO ...
- Java SE之XML<一>XML文档规约
[文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...
- Coursera, Deep Learning 2, Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Course
Train/Dev/Test set Bias/Variance Regularization 有下面一些regularization的方法. L2 regularation drop out da ...
- CF920E Connected Components?
CF luogu 先讲两个靠谱的做法 1.首先因为有n个点,m条不存在的边,所以至少存在一个点,和m/n个点之间没边,所以把这个点找出来,连一下其他相连的点,这样还剩m/n个点没确定在哪个联通块,而这 ...
- npm 切换源 nrm
版权声明:欢迎转载,请附加转载来源:一路博客(http://www.16boke.com) 转载 http://blog.csdn.net/wyc_cs/article/details/5155925 ...
- python2 编码与解码
#!coding: utf-8 s = "特斯拉" s_to_unicode = s.decode("utf-8") unicode_to_gbk = s_to ...
- CSS公共清除浏览器默认样式
/*Vue隐藏*/ [v-cloak] { display: none; } /*清除样式*/ body, ol, ul, dl, li, dt, dd, h1, h2, h3, h4, h5, h6 ...
- 第一章 Android系统的编译和移植实例
第一章 Android系统的编译和移植实例 这一章节主要介绍了Android系统的编译和移植技术,作为建立在Linux内核的基础上的Android操作系统,它的编译和移植不论在过程还是技术方面都和嵌入 ...
- burp导入证书后仍然抓不到https包
burp导入证书后仍然抓不到https包 如果你是导入证书有问题,请参考此博客 http://blog.csdn.net/zyw_anquan/article/details/47904495 有一点 ...
- python问题:TypeError: a bytes-like object is required, not 'str'
源程序: import socket target_host = "www.baidu.com" # 127.0.0.1 target_port = 80 # 建立一个socket ...