这里主要是讲序列化单表的几种方法

先看下models中设计的表结构

from django.db import models

# Create your models here.

class Book(models.Model):
id = models.AutoField(primary_key=True)
book_name = models.CharField(max_length=64,null=False,blank=False,verbose_name="书籍名称")
book_price = models.DecimalField(max_digits=5,decimal_places=2,null=False,blank=False,verbose_name="书籍价格")
book_publish = models.ForeignKey(to="Publish",to_field="id",verbose_name="书籍出版社")
book_auther = models.ManyToManyField(to="Auther",verbose_name="书籍作者") class Meta:
verbose_name = "书籍表"
verbose_name_plural = verbose_name
def __str__(self):
return self.book_name class Publish(models.Model):
id = models.AutoField(primary_key=True)
publish_name = models.CharField(max_length=64,null=False,blank=False) class Meta:
verbose_name = "出版社表"
verbose_name_plural = verbose_name def __str__(self):
return self.publish_name class Auther(models.Model):
id = models.AutoField(primary_key=True)
auther_name = models.CharField(max_length=64,null=False,blank=False)
def __str__(self):
return self.auther_name class Meta:
verbose_name = "作者表"
verbose_name_plural = verbose_name

  

我们只对出版社表进行序列化,因为在我们这里的事例中,出版社表所有的字段都是单表字段,处理起来比较简单,后面我们就会介绍一对多和多对多字段的表该如何序列化

我们这里使用cbv的方式来测试

from django import views

  

下面先介绍三种序列化的方式

import json
class test_cbv(views.View):
def get(self,request,*args,**kwargs): # 一、序列化 publish_list = models.Publish.objects.all()
publish_obj = models.Publish.objects.all().first() # 方式1
# ser1 = publish_list.values("id","publish_name")
# ret1 = json.dumps(list(ser1))
# return HttpResponse(ret1) # 2、方式二
# from django.forms.models import model_to_dict
# model_to_dict 把一个model对象转换为字典的方法
# ret2 = []
# for obj in publish_list:
# temp.append(model_to_dict(obj))
# return HttpResponse(json.dumps(ret2)) # 3、方式3
# from django.core import serializers
# serializers ---django的序列化组件 # ret3 = serializers.serialize(format="json",queryset=publish_list)
# 指明格式为json,传递一个queryset对象进去就可以了 # return HttpResponse(ret3)

  

最后我们看下restframework序列化的方式,可以序列化一个queryset对象,也可以序列化一个model对象

首先需要通过pip安装restframworkork

pip install djangorestframework

  

然后按照下面的格式写一个类

# 为queryset或者model对象做序列化的类
from rest_framework import serializers
class pub_serializers(serializers.Serializer):
publish_name = serializers.CharField()  

  

指明对表中哪些字段做处理,和django的froms组件很像

        # 4、方式4
# ps_queryset = pub_serializers(publish_list,many=True)
# return HttpResponse(ps_queryset.data) ps_model = pub_serializers(publish_obj)
print(ps_model.data)
return HttpResponse(ps_model.data)

  

至此,单表的序列化我们介绍完了!

django序列化单表的4种方法的介绍的更多相关文章

  1. Django扩展Auth-User表的几种方法

    方式1, OneToOneField from django.contrib.auth.models import Userclass UserProfile(models.Model): user ...

  2. form表单提交的几种方法

    form表单提交的几种方法 <form id="myform" name="myform" method="post" onsubmi ...

  3. HTML5中表单验证的8种方法

    HTML5中表单验证的8种方法 2012-4-21 11:00| 发布者: benben| 查看: 2765| 评论: 0 摘要: 前一篇,我们介绍了HTML5中新的表单特性和函数, 今天就继续来谈谈 ...

  4. 巨蟒python全栈开发django6: FBV&CBV&&单表查询的其他方法

    练习CBV用法 截图中的action="/cbv/",应该是这样 上边红图,说明mysql有问题,需要重启一下 返回,输入的内容 @wrapper==>cbv=wrapper ...

  5. MySQL数据库分表的3种方法

    原文地址:MySQL数据库分表的3种方法作者:dreamboycx 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目 ...

  6. js阻止表单提交的两种方法

    下面直接看代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. ace+validate表单验证(两种方法)

    //修改密码(直接在validate中验证提交) $("#changePassword").on(ace.click_event, function() { var html = ...

  8. HTML5中表单验证的8种方法(转)

    在深人探讨表单验证之前,让我们先思考一下表单验证的真实含义.就其核心而言,表单验证是一套系统,它为终端用户检测无效的控件数据并标记这些错误.换言之,表单验证就是在表单提交服务器前对其进行一系列的检查并 ...

  9. django之单表操作

    1.查询方法: <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs ...

随机推荐

  1. jquery 设计的思路-----初级

    jquery.js 很经典,其中有一些设计思路简直非常经典 1.安全的创建一个构造函数并进行调用: <script> // 这是一种安全的构造函数的创建方法,在调用构造函数G的时候,不论使 ...

  2. 微信、陌陌等著名IM软件设计架构详解(转)

    对微信.陌陌等进行了分析,发出来分享一下(时间有些久了) 电量:对于移动设备最大的瓶颈就是电量了.因为用户不可能随时携带电源,充电宝.所以必须考虑到电量问题.那就要检查我们工程是不是有后台运行,心跳包 ...

  3. Linux命令:unzip

    语法: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 默认行为将zip文件中的内容全部解压缩到当前目录下. ...

  4. matt cutts : try something new for 30 days

    30 天尝试新事物matt cutts : try something new for 30 days[小计划帮你实现大目标] 是否有些事情, 你一直想去做, 但就是没有实现?马特 ?卡茨建议: 尝试 ...

  5. 趣味编程:静夜思(Kotlin版)

    import java.util.* fun verticalWriting(txt:String, offset:Int) = txt.mapIndexed { i, c -> Pair(i, ...

  6. su: cannot set user id: Resource temporarily unavailable问题解决

    操作环境 SuSE11sp1 问题现象 执行su - test命令切换失败,提示"su: cannot set user id: Resource temporarily unavailab ...

  7. 在JSP页面中导入jstl标签库

    1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...

  8. [PHP]PHPOffice/PHPExcel数据导入方法

    ------------------------------------------------------------------------------------ /** * PHPExcel数 ...

  9. Constructor构造方法

    我们写一个car类,并写一个无参构造方法. public class Car { int speed; //构造方法名字和 类一致 区分大小写 不需要写返回值 和参数列表 public Car(){ ...

  10. android资讯类软件框架《IT蓝豹》

    android资讯类软件框架 android资讯类软件框架,支持侧滑,并且首页viewpager切换tab,tab滑动到最右侧的时候提示滑动结束, 滑动到最左侧的时候切换滑动侧滑menu.左滑和侧滑处 ...