关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

我们从数据库取出数据的格式有三种:1、all()返回的是QuerySet对象;2、values()返回的是QuerySet对象的字典类型;3、vlaues_list() 返回的QuerySet对象的元组类型

1、第2和第3种都可以在后端通过json.dumps()传递给前端。

******后端获取quesyset对象*******
import json
ret = models.BookType.objects.all().values('caption')
ret = models.BookType.objects.all().values_list('caption')
ret=list(ret)
result = json.dumps(ret)
*******前端ajax******
前端ajax接受的数据通过JSON.parse(data) 将后端传递的quesyset数据进行转换

2、对于第1种情况:需要serializers将获取的QuerySet对象进行序列化转换才可以传递给前端

*******后端从数据库提取数据*********
from django.core import serializers
ret = models.BookType.objects.all()
data = serializers.serialize("json", ret)#注意serializers只能对QuerySet对象进行序列化转换
*******前端对得到的数据通过JSON.parse(data)进行转换

由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:import json

from datetime import date
from datetime import datetime 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) d=datetime.now()
ds = json.dumps(d, cls=JsonCustomEncoder) #调用基类的用法json.dunmps 上一步相当于:
a=datetime.now()
cls=JsonCustomEncoder()
d=cls.default(a)
ds = json.dumps(d)

如果需要对一个对象做序列化:

例如:

data={

  'time':datatime.now()

  'response':Foo('adc')#字典中存在一个类的实例化对象,则也无法对其进行序列化

  }

class Foo():
def __init__(self,data):
self.data=data

解决办法,在JsonCustomEncoder中加入对象的序列化

from datetime import date
from datetime import datetime
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, Foo):
return field.__dict__ # 返回对象的属性字典就可以对对象进行序列化了
else:
return json.JSONEncoder.default(self, field)#如果传入的数据类型不是上面的时间格式或者对象格式,按原生的json格式数据
ds = json.dumps(data, cls=JsonCustomEncoder) 
print(ds)
*****结果*******
{"time": "2019-06-18 15:48:58", "response": {"data": "abc"}}

django 的序列化的更多相关文章

  1. django的序列化

    关于django的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的Json格式 两种方法: 方法一:serializers: 缺点就是只能应用于对象 "&q ...

  2. django rest_framework 序列化组件详解

    为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...

  3. 从django的序列化到rest-framework 序列化

    1.利用Django的view实现返回json数据 from django.views.generic import View from goods.models import Goods class ...

  4. 关于Django的序列化

    阅读目录 Django支持的序列化格式 Django的序列化 Django支持的序列化格式 1 2 3 4 Identifier Information xml Serializes to and f ...

  5. Django 之 序列化

    Django之序列化 关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. serializers 1 2 3 4 5 from dj ...

  6. 【Django】序列化

    Django中序列化主要应用于将数据库中检索的数据返回给客户端用户,特别是Ajax请求一般返回为Json格式. * 1.from django.core import serializers** fr ...

  7. python Django rest-framework 序列化步骤

    django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包.本文介绍一下 django-rest-framework 的简单 ...

  8. django restframework 序列化

    Serialization 序列化 创建表 from django.db import models from pygments.lexers import get_all_lexers from p ...

  9. python3-开发进阶Django中序列化以及rest_framework的序列化

    一.django框架的序列化 直接上代码 1.这是app下的models.py from django.db import models # Create your models here. clas ...

  10. django的序列化问题

    Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式 1.serializers from django.core import seria ...

随机推荐

  1. Golang的开发环境配置之SlickEdit篇

    Golang的开发环境通常有如下三种: 1. vi, emacs, notepad++ 2. Sublime Text 2/3 3. LiteIDE 不过,今天我想体验一下在slickedit当中使用 ...

  2. 【extjs6学习笔记】1.2 初始:MVC MVVM

    模型 这表示数据层.该模型可以包含数据验证和逻辑来保持数据.在 ext js 中, 大多数模型都与一个数据存储一起使用. 视图 这表示用户界面. 是用户在屏幕上看到的组件. 在每次互动的用户与应用程序 ...

  3. SQLServer 2012 Always on配置全过程

    AlwaysOn取数据库镜像和故障转移集群之长.AlwaysOn不再像故障转移集群那样需要共享磁盘,从而主副本和辅助副本可以更容易的部署到不同的地理位置:AlwaysOn还打破了镜像只能1对1的限制, ...

  4. JAVA-WEB总结02

     1 什么是JavaBean?有何特征?    1)符合特定规则的类    2)JavaBean分二类: a)侠义的JavaBean .私有的字段(Field) .对私有字段提供存取方法(读写方法) ...

  5. 【Orange Pi Lite2】 ——1《如何开始使用开源硬件》

    [Orange Pi Lite2] --1<如何开始使用开源硬件> 本文只在博客园发布 在开始前你需要准备的材料与软件 用户手册_Orange Pi Lite2 OrangePi_Lite ...

  6. CF Gym 100187M Heaviside Function(二分)

    题意:给你一个函数和一些系数,给你一堆询问,求函数值. 根据s的符号,分成两组讨论,函数值与比x小的系数数量有关,二分输出答案. #include<cstdio> #include< ...

  7. FMDB浅析(思想)

    http://www.cnblogs.com/OTgiraffe/p/5931800.html 一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQLite的API进行了封装,加上了面向 ...

  8. java基础—对象转型

    一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...

  9. Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换

    1. TensorFlow TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性. Te ...

  10. STL之map操作[转]

    转自https://www.cnblogs.com/yutongzhu/p/5884269.html 作者彼得朱 map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来 ...