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 ...
随机推荐
- Android为TV端助力(转载)
作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...
- 测者的性能测试手册:Web压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...
- MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理
1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...
- webmagic 基本的方法
WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件,并由Spider将它们彼此组织起来.这四大组件对应爬虫生命周期中的下载.处理. ...
- Win7 64位下安装64bit MS SQL Server2005时安装不了Reporting Services的处理办法
警告截图: 解决办法: 在cmd窗口运行如下脚本即可: "cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/A ...
- win10 anaconda+tensorflow+keras
最近想用python实现下lstm模型,然后看网上教程配置了下环境,中间出现了一些问题,记录下. 1.开始menu中anaconda文件夹下没有ipython的图标了. 我电脑里的anaconda是很 ...
- Cs231n课堂内容记录-Lecture 9 深度学习模型
Lecture 9 CNN Architectures 参见:https://blog.csdn.net/qq_29176963/article/details/82882080#GoogleNet_ ...
- SQLServer之修改DEFAULT约束
使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...
- php分页实现
<?php header("content-type:text/html;charset=utf8"); include 'conn.php'; //每页显示的数据条数 $p ...
- vi命令下常用命令
dd:删除游标所在的一整行(常用)ndd:n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行d1G:删除光标所在到第一行的所有数据dG:删除光标所在到最后一行的所有数据d$:删 ...