序列化

背景

对于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. ButterKnife注解式绑定控件

    Butter Knife Android为控件设计的注解绑定库. github地址:https://github.com/JakeWharton/butterknife 添加依赖:(具体看github ...

  2. SQLServer之函数简介

    用户定义函数定义 与编程语言中的函数类似,SQL Server 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的例程. 返回值可以是单个标量值或结果集. 用户定义函数准则 ...

  3. 比较两个slice、struct或者map是否相等

    我们可以直接使用reflect.DeepEqual来比较两个slice.struct或者map是否相等 package main import ( "fmt" "refl ...

  4. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...

  5. .net 获取远程访问的ip

    这两天一直做获取远程访问的ip和自己的ip相关的问题. 在解决获取ip相关问题的时候,主要使用了上下文对象,httpcontext对象.原理很简单,内部有两大对象,request和response.里 ...

  6. Vue SSR: 基本用法 (二)

    上一篇讲解了ssr的原理,这篇主要讲基本用法: 1.安装 npm install vue vue-server-renderer --save 我们将在整个指南中使用 NPM,但你也可以使用 Yarn ...

  7. SQL NULL 函数

    SQL ISNULL().NVL().IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductName UnitPrice ...

  8. 获取与esp8266连接的客户端的Mac地址 IP 端口 控制停止等问题

    两个关键的库 ESP8266WebServer.h WiFiClient.h ESP8266WiFiAP.cpp C:\Users\dongdong\Desktop\Arduino-master\li ...

  9. koa-router 源码由浅入深的分析(7.4.0版本的)

    首先简单的介绍下什么koa-router,为什么要使用它,可以简单看下上一篇文章. 了解koa-router 首先我们来看下koa-router的源码的基本结构如下,它是由两部分组成的: ------ ...

  10. Linux内核入门到放弃-无持久存储的文件系统-《深入Linux内核架构》笔记

    proc文件系统 proc文件系统是一种虚拟的文件系统,其信息不能从块设备读取.只有在读取文件内容时,才动态生成相应的信息. /proc的内容 内存管理 系统进程的特征数据 文件系统 设备驱动程序 系 ...