Django 序列化
序列化
背景
对于Django 的queryset 对象在传递给 前端的时候,前端是无法识别的
因此需要存在一个转换过程将 queryset 对象转换成 字符串前端才可以识别
演示
QuerySet 无法被 json 序列化,因此无法传值给前端
from django.shortcuts import render, HttpResponse
from app01 import models
import json # Create your views here.
def index(request):
user = models.User.objects.all()
data = json.dumps(user)
return HttpResponse(locals())
TypeError: Object of type QuerySet is not JSON serializable
使用模块及方法
Django为我们提供了一个强大的序列化工具serializers。使用它也很简单
示例
from django.shortcuts import render, HttpResponse
from app01 import models
from django.core import serializers # Create your views here.
def index(request):
user = models.User.objects.all()
print(user)
data = serializers.serialize("json",user)
print("data:",data)
# data: [{"model": "app01.user", "pk": 1, "fields": {"name": "yang", "password": "123456"}}]
print(type(data)) # <class 'str'>
return HttpResponse(data)
参数
- "json" 数据格式,
- QuerySet 要序列化的数据对象,数据通常是ORM模型的QuerySet,一个可迭代的对象。
注意
对于具体的对象,无法进行序列化,请使用filter转换成 QuerySet 对象后在使用。
还有某几个版本之前的貌似时间格式也没法序列化。目前我用的 1.10.11已经支持时间字段的序列化了。
from django.shortcuts import render, HttpResponse
from app01 import models
from django.core import serializers # Create your views here.
def index(request):
user = models.User.objects.all().first()
print(user) # yang
print(type(user)) # <class 'app01.models.User'>
data = serializers.serialize("json",user)
# TypeError: 'User' object is not iterable
print("data:",data)
print(type(data))
return HttpResponse(data)
序列化指定字段
只想序列化某些指定的字段,可以使用fields参数
from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
反序列化数据
for obj in serializers.deserialize("xml", data):
do_something_with(obj)
总结
对于 这个 序列化方式并不是很推荐
他返回的数据会很多很杂乱很不方便使用,
后期我们会使用 另一个更加方便的序列化工具。这个仅作了解。
(没错,就是 rest_framework 里面的序列化组件)
补充
JsonResponse 使用
可以进行序列化 ,但是不能对model对象以及 QuerySet对象序列化
示例
from django.shortcuts import render, HttpResponse
from django.http import JsonResponse
from app01 import models
from django.core import serializers
import json # Create your views here.
def index(request):
dic = {"yang": "tuo"}
# return HttpResponse(dic) # yang
# return HttpResponse(dic.items()) # ('yang', 'tuo') # response = JsonResponse(dic)
# return response # {"yang":"tuo"} # return JsonResponse(dic) # {"yang":"tuo"} # user = models.User.objects.all().first()
# response = JsonResponse(user,safe=False)
# return response # Object of type User is not JSON serializable # user = models.User.objects.all()
# response = JsonResponse(user, safe=False)
# return response # Object of type QuerySet is not JSON serializable
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(序列化、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 ...
随机推荐
- SAP MM 启用批次管理的物料MB21创建预留单据时批次号可以为空!
SAP MM 启用批次管理的物料MB21创建预留单据时批次号可以为空! 如下预留, 批次号字段为空. 实际上该物料是有激活batch management的, For MB21, it is just ...
- arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- asp.net/wingtip/显示数据和详细信息
前边我们的工作处于wingtip工程基础建设阶段,先是建立了“数据访问层”,然后设计建设了“UI和导航”的框架,接下来要充实工程的内容,显示“数据和详细信息”. 一. 添加数据控件(Data Cont ...
- jupyter notebook安装、登录
pip install jupyter 提示pip需要升级(本人装的是anaconda) 输入:python -m pip install --upgrade pip 安装完成. 运行jupyter ...
- Xamarin 打包生成 Android apk 文件
Visual Studio 支持 apk 发布 Xamarin.Forms项目或Xamarin.Android项目开发完成之后需要发布.比较常规的发布方式是生成 apk 文件,微软也考虑到开发者有发布 ...
- WPF:实现自定义标记扩展
标记扩展使用{标记扩展类 参数}语法,如: <TextBlock Text={x:Null}/> 为什么x:Null就可以返回一个null值呢? 其实在System.Windows.Mar ...
- Java 8 的Lambda表达式
第一次看到用lambda表达式写出来的Java代码时,我对这种神秘的语法感到非常不理解,认为这样的Java搞得不可读.没有专门的去学习和认识,今天花了几个小时写了示例的练习后,我开心的看到了更清晰的J ...
- 验证二叉搜索树的golang实现
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- 日志学习系列(三)——NLog基础知识
前边我们解释了log4net的学习,我们再介绍一下NLog 一.什么是NLog NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单 ...
- 深入Ambari Metrics 机制分析
0.简介 Ambari作为一款针对大数据平台的运维管理工具,提供了集群的创建,管理,监控,升级等多项功能,目前在业界已经得到广泛使用. Ambari指标系统( Ambari Metrics Syste ...