参考:https://blog.csdn.net/zhangmengran/article/details/84887206

目的:

  使用serializer序列化器将QuerySet数据序列化为json数据,用django restframework开发后端接口将此json数据返回

serializer序列化
1.主要是序列化数据,将QuerySet集合中的ORM对象序列化成json字符串,作为接口数据返回(json格式)

一、编写models.py

  1. from django.db import models
  2.  
  3. class Sonar(models.Model):
  4. """
  5.  
  6. """
  7. project = models.CharField(max_length=20)
  8. bugs = models.CharField(max_length=10)
  9. vulnerability = models.CharField(max_length=10)
  10. issue_count = models.CharField(max_length=10)
  11. issue_url = models.CharField(max_length=200)
  12.  
  13. def __str__(self):
  14. return self.project

二、在utils包下的serializer.py文件中自定义一个类

  1. from rest_framework import serializers
  2.  
  3. class SonarSerializer(serializers.Serializer):
  4. # 要定义需要序列化的字段,注意:这里定义的字段的值必须和models.py中的字段保持一致,将models换为serializers就行
  5. project = serializers.CharField(max_length=20)
  6. bugs = serializers.CharField(max_length=10)
  7. vulnerability = serializers.CharField(max_length=10)
  8. issue_count = serializers.CharField(max_length=10)
  9. issue_url = serializers.CharField(max_length=200)

三、然后编写视图类views.py

  1. from django.shortcuts import render
  2. from rest_framework.views import APIView
  3. from util.serializer import SonarSerializer
  4. from rest_framework.response import Response
  5. from sonar.models import Sonar
  6.  
  7. class SonarCount(APIView):
  8.  
  9. def get(self, request, *args, **kwargs):
  10. # 查询出所有的数据,为QuerySet格式
  11. sonar = Sonar.objects.all()
  12. total = sonar.count()
  13. # 参数:1.instance需要序列化的对象 2.是一个对象还是多个对象,如果是多个必须设置many=True
  14. serializer = SonarSerializer(instance=sonar, many=True)
  15. # 返回最终的json数据serializer.data
  16. return Response({"status": "success", "total": total, "rows":serializer.data})

四、最后设置路由:

  1. from django.conf.urls import url
  2. from sonar.views import SonarCount
  3.  
  4. urlpatterns = [
  5. url(r'^sonarCount/', SonarCount.as_view()),
  6. ]

post测试一下

 优化:优化一下视图类

  1. from rest_framework.views import APIView
  2. from util.serializer import SonarSerializer
  3. from rest_framework.response import Response
  4. from sonar.models import Sonar
  5.  
  6. class SonarCount(APIView):
  7.  
  8. def post(self, request, *args, **kwargs):
  9. # 没有传递入参时会报KeyErrore,将此异常捕获
  10. try:
  11. query = request.data['id']
  12. except:
  13. # 捕获后置为None
  14. query=None
  15. # 如果query值存在则查询对应的数据
  16. if query:
  17. sonar = Sonar.objects.filter(id=query)
  18. else:
  19. # 不存在则默认查询所有数据
  20. sonar = Sonar.objects.all()
  21. # 获取总条数
  22. total = sonar.count()
  23. # 参数:1.instance需要序列化的对象 2.是一个对象还是多个对象,如果是多个必须设置many=True
  24. serializer = SonarSerializer(instance=sonar, many=True)
  25. # 返回最终的json数据serializer.data,根据需要对返回的json略作修改
  26. return Response({"status": "success", "total": total, "rows": serializer.data})

测试:

1、传递参数时,返回对应的数据

2、不传递入参时,返回全部数据

以上只是单表数据的序列化,下面看看序列化多表(一对多、多对多)

参考:https://blog.csdn.net/zhangmengran/article/details/84887206

Django:前后端分离 djangorestframework开发API接口 serializer序列化认证组件的更多相关文章

  1. 前后端分离djangorestframework—— 在线视频平台接入第三方加密防盗录视频

    加密视频 在以后的开发项目中,很可能有做在线视频的,而在线视频就有个问题,因为在线播放,就很有可能视频数据被抓包,如果这个在线视频平台有付费视频的话,这样就会有人做点倒卖视频的生意了,针对这个问题,目 ...

  2. 从零开始搭建django前后端分离项目 系列一(技术选型)

    前言 最近公司要求基于公司的hadoop平台做一个关于电信移动网络的数据分析平台,整个项目需求大体分为四大功能模块:数据挖掘分析.报表数据查询.GIS地理化展示.任务监控管理.由于页面功能较复杂,所以 ...

  3. 利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境

    前后端分离这个词一点都不新鲜,完全的前后端分离在岗位协作方面,前端不写任何后台,后台不写任何页面,双方通过接口传递数据完成软件的各个功能实现.此种情况下,前后端的项目都独立开发和独立部署,在开发期间有 ...

  4. 前后端分离djangorestframework—— 接入第三方的验证码平台

    关于验证码部分,在我这篇文章里说的挺详细的了:Python高级应用(3)—— 为你的项目添加验证码 这里还是再给一个前后端分离的实例,因为极验官网给的是用session作为验证的,而我们做前后端分离的 ...

  5. [django]前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  6. 前后端分离djangorestframework——分页组件

    Pagination 为什么要分页也不用多说了,大家都懂,DRF也自带了分页组件 这次用  前后端分离djangorestframework——序列化与反序列化数据  文章里用到的数据,数据库用的my ...

  7. 前后端分离djangorestframework——视图组件

    CBV与FBV CBV之前说过就是在view.py里写视图类,在序列化时用过,FBV就是常用的视图函数,两者的功能都可以实现功能,但是在restful规范方面的话,CBV更方便,FBV还要用reque ...

  8. 前后端分离djangorestframework——路由组件

    在文章前后端分离djangorestframework——视图组件 中,见识了DRF的视图组件强大,其实里面那个url也是可以自动生成的,就是这么屌 DefaultRouter urls文件作如下调整 ...

  9. 前后端分离djangorestframework——序列化与反序列化数据

    我们写好后端的代码,要把数据交给前端的展示的,这个数据以什么类型给前端呢?学到这里,我们已经知道这个数据最好是json字符串才行,因为网络间的传输,只认字符串或者二进制,字符串就是我们的数据,二进制就 ...

随机推荐

  1. SUID提权

    查看tmp目录权限 ll -d /tmp 切换到tmp目录 cd /tmp 创建一个exploit目录 mkdir exploit 查看ping命令带suid权限 ll /bin/ping 创建tar ...

  2. Partition HDU - 4602 (不知道为什么被放在了FFT的题单里)

    题目链接:Vjudge 传送门 相当于把nnn个点分隔为若干块,求所有方案中大小为kkk的块数量 我们把大小为kkk的块,即使在同一种分隔方案中的块 单独考虑,它可能出现的位置是在nnn个点的首.尾. ...

  3. 按值传递与按值引用详解(java版)

    http://blog.csdn.net/zzp_403184692/article/details/8184751

  4. c++ 将float 类型转换成string 类型

    string Convert(float Num) { ostringstream oss; oss<<Num; string str(oss.str()); return str; }

  5. hibernate之一对多关系

    1. 什么是关联(association) 1.1 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如: public class A{ private B b ...

  6. proxysql 学习一 proxysql docker 运行试用

    proxysql 是一个比较强大的mysql proxy 服务,支持动态mysql 实例调整,查询重写,查询cache,监控,数据镜像,读写分离 以及ha,最近已经发布了2.0 ,很值得试用下 环境准 ...

  7. circus web console 依赖tornado>3.2 无法访问的bug

    circus web console 是一个很不错的web 监控circus 工具,但是对于高版本一直存在一个bug 信息如下 Traceback (most recent call last): F ...

  8. 使用go-mysql-server 开发自己的mysql server

    go-mysql-server是一个golang 的mysql server 协议实现包,使用此工具我们可以用来做好多方便的东西 基于mysql 协议暴露自己的本地文件为sql 查询 基于mysql ...

  9. node安装失败报错

     安装Node有时会报错 提示这段信息 怎么安装都不行 最后通过命令行安装就可以完成 1.首先去Node下载安装包 下载完后放在本地 比如我放在桌面aa这个文件夹里 2.进去aa这个文件 复制里面的路 ...

  10. javascript巧用注释保存html文本结构

    在js中,肯定会遇到js代码里面有html接口的时候,骚年们都有哪些写法? 刚学JS的写法: <script> var strHtml="<div id=\"te ...