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

先看下models中设计的表结构

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class Book(models.Model):
  6. id = models.AutoField(primary_key=True)
  7. book_name = models.CharField(max_length=64,null=False,blank=False,verbose_name="书籍名称")
  8. book_price = models.DecimalField(max_digits=5,decimal_places=2,null=False,blank=False,verbose_name="书籍价格")
  9. book_publish = models.ForeignKey(to="Publish",to_field="id",verbose_name="书籍出版社")
  10. book_auther = models.ManyToManyField(to="Auther",verbose_name="书籍作者")
  11.  
  12. class Meta:
  13. verbose_name = "书籍表"
  14. verbose_name_plural = verbose_name
  15. def __str__(self):
  16. return self.book_name
  17.  
  18. class Publish(models.Model):
  19. id = models.AutoField(primary_key=True)
  20. publish_name = models.CharField(max_length=64,null=False,blank=False)
  21.  
  22. class Meta:
  23. verbose_name = "出版社表"
  24. verbose_name_plural = verbose_name
  25.  
  26. def __str__(self):
  27. return self.publish_name
  28.  
  29. class Auther(models.Model):
  30. id = models.AutoField(primary_key=True)
  31. auther_name = models.CharField(max_length=64,null=False,blank=False)
  32. def __str__(self):
  33. return self.auther_name
  34.  
  35. class Meta:
  36. verbose_name = "作者表"
  37. verbose_name_plural = verbose_name

  

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

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

  1. from django import views

  

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

  1. import json
  2. class test_cbv(views.View):
  3. def get(self,request,*args,**kwargs):
  4.  
  5. # 一、序列化
  6.  
  7. publish_list = models.Publish.objects.all()
  8. publish_obj = models.Publish.objects.all().first()
  9.  
  10. # 方式1
  11. # ser1 = publish_list.values("id","publish_name")
  12. # ret1 = json.dumps(list(ser1))
  13. # return HttpResponse(ret1)
  14.  
  15. # 2、方式二
  16. # from django.forms.models import model_to_dict
  17. # model_to_dict 把一个model对象转换为字典的方法
  18. # ret2 = []
  19. # for obj in publish_list:
  20. # temp.append(model_to_dict(obj))
  21. # return HttpResponse(json.dumps(ret2))
  22.  
  23. # 3、方式3
  24. # from django.core import serializers
  25. # serializers ---django的序列化组件
  26.  
  27. # ret3 = serializers.serialize(format="json",queryset=publish_list)
  28. # 指明格式为json,传递一个queryset对象进去就可以了
  29.  
  30. # return HttpResponse(ret3)

  

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

首先需要通过pip安装restframworkork

  1. pip install djangorestframework

  

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

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

  

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

  1. # 4、方式4
  2. # ps_queryset = pub_serializers(publish_list,many=True)
  3. # return HttpResponse(ps_queryset.data)
  4.  
  5. ps_model = pub_serializers(publish_obj)
  6. print(ps_model.data)
  7. 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. SpringBoot读取application.properties文件内容

    application.properties存储数据的方式是key-value. application.properties内容 userManager.userFile=data/user.pro ...

  2. h5 图片生成

    createImg(store, data) { let timer = setTimeout(function (params) { let _canvas = document.querySele ...

  3. 如何查看一个class文件是否正确

    今天碰到了个问题,左思右想就是找不出问题,试验多个路径来解决问题,错误依旧. 然后我拿到了现场的包,一个很大的问题让我忽略了,这个class文件用反编译程序打不开(jd-gui.exe),非常神奇,但 ...

  4. 二维码API接口

    1.http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.54admin.net 2.http://b.bshare ...

  5. semver 版本号命名法

    https://semver.org/lang/zh-CN/ 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性 ...

  6. mybatis中事务简单使用

    一步: 事务只用在service层方法上加 @Transactional(propagation = Propagation.REQUIRED)       :发现如果没有它,增加执行-->1/ ...

  7. python 任务调度模块sched

    类似于crontab的功能,可以实现定时定点执行任务; 将已经生成的任务放入队列中,获取到了执行可以实现任务调度功能; 如果将需求复杂化,加上优先级策略,并能取消已经加入队列中的任务,就需要使用pyt ...

  8. Unity3D初学之2D动画制

    作者:Alex Rose Unity最近宣布推出额外的2D游戏支持,添加了Box 2D物理和一个精灵管理器. 但这里还是有些技巧需要牢记在心.逐帧更改图像只是动画制作的冰山一角,若要让你的游戏出色运行 ...

  9. opencv输出图片像素值

    需求:在控制台输出灰度图像的像素值 代码: #include <stdio.h> #include <iostream> #include <opencv2/core/c ...

  10. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...