序列化

背景

对于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. 什么是基于风险的测试(RBT)?

    基于风险的测试(Risk-based testing) 文/杨学明 一.基于风险的测试起源 基于风险的测试起源,在软件测试领域,基于风险测试最早的是测试大师Boris Beizer<软件测试技术 ...

  2. vue安装和使用

    首先这里记录的是基于安装node.js 的npm安装vue  如果你不是用的node与npm  那就不必往下看了 1.安装node.js这个不多说   百度有很多 2.安装webpack 全局安装we ...

  3. 基于Git项目管理客户端SourceTree的免注册安装及远程连接方法

    作为程序员,不可避免的要在github上查询代码,而在企业项目中,为了使得项目好管理需要使用项目管理客户端,所以接下来详细讲解一下基于git的sourceTree在windows系统下的安装及与Git ...

  4. linux $参数

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...

  5. vue实现打印功能的两种方法

    第一种方法:通过npm 安装插件 1,安装  npm install vue-print-nb --save 2,引入  安装好以后在main.js文件中引入 import Print from 'v ...

  6. spingboot一键部署到阿里云(Cloud Toolkit工具)

    一般做法 一键部署工具   前些天在完成一个项目时候需要将springboot项目部署到服务器上, 以下是两种做法 前面介绍的是一般做法: 后面将介绍省去这些步骤的一键部署工具Cloud Toolki ...

  7. Java学习笔记记录(一)

    1.Java编写的一个基本结构 1 public class demo{ //以下包含权限修饰符.静态修饰符.返回值修饰符以及主方法main() 2 public static void main(S ...

  8. springclound

    https://blog.csdn.net/w893932747/article/details/80896315 //这个有怎么创建client的 https://blog.csdn.net/m0_ ...

  9. 前端请求参数MD5加密发送后台

    最近在项目开发中遇到前端发送参数加密的问题,网上查找半天也是很乱,小编自己在项目开发中总结了一下,写到博客中,希望能够帮助大家. 查看所有代码可到我的github上查看源文件,下载后在控制台查看结果即 ...

  10. 在app中从下向上滑动,以找到不在默认第一页的元素

    1.在app中,如果第一面没有出现你要的元素,需要下滑拉动到你需要的元素的位置