django的序列化
关于django的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的Json格式
两种方法:
方法一:serializers:
缺点就是只能应用于对象
"""
ret = models.Book.objects.filter(con)
print(ret) # queryset,[对象] #就是上面是列表
from django.core import serializers
#这种方法是django的自己的序列化方法,但是有个缺点,下面这句的ret只能是对象,所以只能用第二种方式
data = serializers.serialize("json", ret)
print(type(data),data)
# 字符串
"""
方法二:json.dumps
"""
#ret = models.Book.objects.filter(con).values('name','book_type__caption')
ret = models.Book.objects.filter(con).values_list('name', 'book_typ__ecaption')
print(ret,type(ret))
li = list(ret)
#这种方式也有一个缺点,就是date和小数的时候不能序列化,所以需要自定义类并继承
data = json.dumps(li)
print(data,type(data))
"""
但是json.dumps时无法处理datetime日期和小数,所以无法通过自定义处理器来做扩展,
如:
import json
from datetime import date
from datetime import datetime
from decimal import Decimal
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')
elif isinstance(field, Decimal):
return str(field)
else:
return json.JSONEncoder.default(self, field)
那么怎么应用呢?
看案例:
import json
from datetime import date
from datetime import datetime
from decimal import Decimal
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')
elif isinstance(field, Decimal):
return str(field)
else:
return json.JSONEncoder.default(self, field)
def index(request):
if request.method == 'POST':
ret = {'status': False, 'message': '', 'data':None}
try:
post_data = request.POST.get('post_data',None)
post_data_dict = json.loads(post_data)
print(post_data_dict)
# {'name': ['11', 'sdf'],'price': ['11', 'sdf']}
# 构造搜索条件
from django.db.models import Q
con = Q()
for k,v in post_data_dict.items():
q = Q()
q.connector = 'OR'
for item in v:
q.children.append((k, item))
con.add(q, 'AND')
""" ret = models.Book.objects.filter(con)
print(ret) # queryset,[对象] #就是上面是列表 from django.core import serializers
#这种方法是django的自己的序列化方法,但是有个缺点,下面这句的ret只能是对象,所以只能用第二种方式
data = serializers.serialize("json", ret)
print(type(data),data)
# 字符串
"""
"""
#ret = models.Book.objects.filter(con).values('name','book_type__caption')
ret = models.Book.objects.filter(con).values_list('name', 'book_typ__ecaption')
print(ret,type(ret))
li = list(ret)
#这种方式也有一个缺点,就是date和小数的时候不能序列化,所以需要自定义类并继承
data = json.dumps(li)
print(data,type(data))
"""
print(type(con))
result = models.Book.objects.filter(con).values('name','price','pubdate','book_type__caption')
# ret = models.Book.objects.filter(con).values_list('name', 'book_type__caption')
li = list(result)
ret['status'] = True
ret['data'] = li
except Exception as e:
ret['message'] = str(e)
ret_str = json.dumps(ret, cls=JsonCustomEncoder)
return HttpResponse(ret_str)
return render(request, 'input.html')
views.index.py
django的序列化的更多相关文章
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- 从django的序列化到rest-framework 序列化
1.利用Django的view实现返回json数据 from django.views.generic import View from goods.models import Goods class ...
- 关于Django的序列化
阅读目录 Django支持的序列化格式 Django的序列化 Django支持的序列化格式 1 2 3 4 Identifier Information xml Serializes to and f ...
- Django 之 序列化
Django之序列化 关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. serializers 1 2 3 4 5 from dj ...
- 【Django】序列化
Django中序列化主要应用于将数据库中检索的数据返回给客户端用户,特别是Ajax请求一般返回为Json格式. * 1.from django.core import serializers** fr ...
- python Django rest-framework 序列化步骤
django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包.本文介绍一下 django-rest-framework 的简单 ...
- django restframework 序列化
Serialization 序列化 创建表 from django.db import models from pygments.lexers import get_all_lexers from p ...
- python3-开发进阶Django中序列化以及rest_framework的序列化
一.django框架的序列化 直接上代码 1.这是app下的models.py from django.db import models # Create your models here. clas ...
- django的序列化问题
Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式 1.serializers from django.core import seria ...
随机推荐
- Java web 使用页面压缩
借助类,相关依赖: <!-- https://mvnrepository.com/artifact/net.sourceforge.pjl-comp-filter/pjl-comp-filter ...
- Vim编辑器
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- osharp3引入事务后操作结果类别的调整
/// <summary> /// 表示业务操作结果的枚举, /// 对于业务务操作单元的影响只有二种状态, /// 成功,无变化: 操作将继续,事务将继续 /// 失败:将导致 操作被中 ...
- SSLv3 Poodle攻击漏洞检测工具
漏洞编号:CVE-2014-3566 POC如下: import ssl,socket,sys SSL_VERSION={ 'SSLv2':ssl.PROTOCOL_SSLv2, 'SSL ...
- Python之路【第十四篇】前端补充回顾
布局和事件 1.布局 首先看下下面的图片: 上面的内容都是居中的,怎么实现这个效果呢,第一种方法是通过float的方式,第二种是通过“div居中的方式” 第一种方式不在复述了,直接看第二种方式: 1. ...
- 网页JQ基础之jq-隐藏以及显示特效
简单的 隐藏以及显示的 JQ 的代码如下: <!DOCTYPE html> <html> <head> <script src="/jquery/j ...
- R语言画图实例-参考R语言实战
dose <- c(, , , ,) drugA <- c(, , , , ) drugB <- c(, , , , ) # 数据准备 opar <- par(no.reado ...
- ThinkPHP整合支付宝担保交易
ThinkPHP整合支付宝担保交易本代码参考大神 http://www.thinkphp.cn/code/240.html 的思路 1.登陆支付宝后台,下载担保交易的集成包. 2.下载完成后的文件说明 ...
- JQ分页功能
HTML <div id='page'></div> <div id='con'></div> CSS span{width: 60px;height: ...
- MainData仿Backbone Model式 数据模型记录器
MainData仿Backbone Model式 数据模型记录器主要思想:将 数据记录处理 和 因为数据变化而产生的页面渲染 两者解耦, 让页面元素可以与数据进行关联绑定,杜绝因为遗忘或是逻辑复杂导致 ...