序列化

背景

对于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 序列化的更多相关文章

  1. 通过ajax GET方式查询数据,Django序列化objects

    点击“查找2”按钮,通过ajax GET方式进行查询数据,这样页面不需要整体刷新,之后清空tbody数据,将查询结果重新附加到tbody 前端html: <div class="box ...

  2. Django序列化

    一.Django序列化    1.序列化应用场景     1.关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,由于httpresponse只能返回字符串或者是字节,而从数据库 ...

  3. Django序列化&django REST framework

    第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...

  4. Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)

    12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...

  5. Django(序列化、SweetAlert插件)

    day72 参考:https://www.cnblogs.com/liwenzhou/p/8718861.html#autoid-6-1-2 前端序列化 后端序列化 day73中 补充一个SweetA ...

  6. django序列化 serializers

    Django的序列化工具让你可以将Django的模型‘翻译’成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 一.序列化数据 Django为我们提供了一个强大 ...

  7. django序列化单表的4种方法的介绍

    这里主要是讲序列化单表的几种方法 先看下models中设计的表结构 from django.db import models # Create your models here. class Book ...

  8. Django 序列化三种方式 对象 列表 元组

    1.xuliehua.html <html lang="en"> <head> <meta charset="UTF-8"> ...

  9. Python菜鸟之路:Django 序列化数据

    类型一:对于表单数据进行序列化 这时需要用到ErrorDict. ret['errors'] = obj.errors.as_data() result = json.dumps(ret, cls=J ...

随机推荐

  1. Android为TV端助力(转载)

    作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...

  2. 测者的性能测试手册:Web压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...

  3. MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

    1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...

  4. webmagic 基本的方法

    WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件,并由Spider将它们彼此组织起来.这四大组件对应爬虫生命周期中的下载.处理. ...

  5. Win7 64位下安装64bit MS SQL Server2005时安装不了Reporting Services的处理办法

    警告截图: 解决办法: 在cmd窗口运行如下脚本即可: "cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/A ...

  6. win10 anaconda+tensorflow+keras

    最近想用python实现下lstm模型,然后看网上教程配置了下环境,中间出现了一些问题,记录下. 1.开始menu中anaconda文件夹下没有ipython的图标了. 我电脑里的anaconda是很 ...

  7. Cs231n课堂内容记录-Lecture 9 深度学习模型

    Lecture 9 CNN Architectures 参见:https://blog.csdn.net/qq_29176963/article/details/82882080#GoogleNet_ ...

  8. SQLServer之修改DEFAULT约束

    使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...

  9. php分页实现

    <?php header("content-type:text/html;charset=utf8"); include 'conn.php'; //每页显示的数据条数 $p ...

  10. vi命令下常用命令

    dd:删除游标所在的一整行(常用)ndd:n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行d1G:删除光标所在到第一行的所有数据dG:删除光标所在到最后一行的所有数据d$:删 ...