• 先看下手动序列化的
# -*- coding: utf-8 -*-
from django.shortcuts import render# Create your views here.
from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from drf import models# 传统的CBV
@method_decorator(csrf_exempt, name='dispatch')
class NomalAPI(View):def get(self, request):return JsonResponse({'status': True, 'data': "nomal"})def post(self, request):pass# CRF 继承APIView(本质上也是继承了django的view,给类套了一层csrf_exempt())class CRFAPI(APIView):def get(self, request):return Response({'status': True, 'data': "crf"})def post(self, request):return Response({'status': True, 'data': "crf-post"})class DepartView(APIView):''' get方法中判断url是否携带id,携带了就获取具体的id下的内容,否则获取全部数据'''def get(self, request, *args, **kwargs):# url中携带的pk是由kwargs传参过来的,而非在request中(request中的是url上?XX=XX的内容)pk = kwargs.get('pk')print(f'pk  is ----------->{pk}')if pk: people = models.Depart.objects.filter(id=pk).values('id', 'title', 'num')else:# 查询所有人,手动序列化返回值为字典格式 .values('id', 'title', 'num')people = models.Depart.objects.all().values('id', 'title', 'num')return Response(people)def post(self, request):pass
  • 对于数据库查询结果,rest framework封装了一个方法用于序列化对象,改写上面的代码
from rest_framework import serializers
# 序列化
class DepartSerializers(serializers.ModelSerializer):class Meta:model = models.Departfields = "__all__"class DepartView(APIView):'''get方法中判断url是否携带id,携带了就获取具体的id下的内容,否则获取全部数据'''def get(self, request, *args, **kwargs):# url中携带的pk是由kwargs传参过来的,而非在request中(request中的是url上?XX=XX的内容)pk = kwargs.get('pk')print(f'pk  is ----------->{pk}')if pk:print('pk获取到了')# res = models.Depart.objects.filter(id=pk).values('id', 'title', 'num')res = models.Depart.objects.filter(id=pk).first()# 实例化序列化类return_res = DepartSerializers(instance=res, many=False)else:# 查询所有人,手动序列化返回值为字典格式 .values('id', 'title', 'num')# res = models.Depart.objects.all().values('id', 'title', 'num')res = models.Depart.objects.all()return_res = DepartSerializers(instance=res, many=True)return Response(return_res.data)def post(self, request, *args, **kwargs):'''新增数据'''res = DepartSerializers(data=request.data)# 数据校验功能if res.is_valid():new_obj = res.save()print(f'new_obj is {new_obj}')return Response(res.data)else:print(res.errors)return Response(res.errors)def delete(self, request, pk):'''删除数据,此处必须要有参数PK(避免全量删除数据)'''models.Depart.objects.filter(id=pk).delete()return Response('删除成功')def put(self, request, pk):'''更新数据(所有字段都要传)'''modify_obj = models.Depart.objects.filter(id=pk).first()if not modify_obj:Response('数据不存在,无法更新')res = DepartSerializers(instance=modify_obj, data=request.data)if res.is_valid():res.save()return Response(res.data)else:return Response(res.errors)

  • 字段少的话感觉还是用.values比较省事 - - !
  • 收回刚才的话。。。未完待续
  • 上面的增删改查可以通过如下方法实现
# views.py
from rest_framework import serializers
# 序列化
class DepartSerializers(serializers.ModelSerializer):class Meta:model = models.Departfields = "__all__"
class NewDepartView(ModelViewSet):queryset = models.Depart.objects.all()serializer_class = DepartSerializers
# urls.py
from django.contrib import admin
from django.urls import path
from drf import viewsurlpatterns = [path('admin/', admin.site.urls),path('api/', views.NomalAPI.as_view()),path('drf_api/', views.CRFAPI.as_view()),path('drf_api/depart/', views.DepartView.as_view()),path('drf_api/depart/<int:pk>/', views.DepartView.as_view()),# drf 单表的增删改查path('drf_api/new/depart/', views.NewDepartView.as_view({'get': 'list', 'post': 'create'})),path('drf_api/new/depart/<int:pk>/',views.NewDepartView.as_view({'get': 'retrieve', 'delete': 'destroy', 'put': 'update'})),
]

换了一个视图继承,APIView换成ModelViewSet除了这两种还有其它的,看下图(摘自哔哩哔哩上面的视频https://www.bilibili.com/video/BV1aJ411H7Ej?p=772&t=1850)

注意点
继承rest framework的视图类后,request不是原来的request了,被重新封装了。request._request是原来的request.

DRF(django restframework)-数据库查询结果序列化相关推荐

  1. Django的数据库查询

    数据库基本操作(查询) 一.查询对象 从数据库里检索对象,可以通过模型的Manage来建立QuerySet,一个QuerySet表现为一个数据库中对象的结合,他可以有0个一个或多个过滤条件,在SQL里 ...

  2. Django——restframework(serializers序列化工具)

    创建虚拟环境 (1)创建一个django的虚拟环境 cd 到一个空的文件夹pip install virtualenvpip install --no--site--packages 项目名称cd 项 ...

  3. Django从理论到实战(part31)--Django数据库查询操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...

  4. DRF (Django REST framework) 框架介绍

    Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...

  5. DRF (Django REST framework) 中的视图类

    视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...

  6. django之ORM查询操作(二)

    文章目录 查询集 基础条件查询--针对一个属性 F和Q对象 聚合函数 统计总的阅读量 关联查询 基础关联查询 内连接查询 自关联查询 查询集 查询集: 表示从数据库中获取的模型对象集合 在管理器上调用 ...

  7. Django,再谈json序列化

    我们知道JSON字符串是目前流行的数据交换格式,在pyhton中我们通过json模块,将常用的数据类型转化为json字符串.但是,json支持转化的数据类型是有限的. 比如,我们通过ORM从数据库查询 ...

  8. Django restframework实现批量操作

    这篇文章主要介绍两种方式实现批量操作, 一种是使用 Django restframework提供的装饰器action,可以更具实际情况扩展默认的增删改查操作,扩展性很好:另外一种是使用第三方模块 dj ...

  9. php beego,MixPHP 2.2 / Beego 1.12 数据库查询性能对比

    质疑的点 本次主要质疑的是:测试没有数据库查询:大家觉得加上 db 查询会很不一样,但是我认为基准测试 hello world 代表天花板,还是有一些意义的,db 查询性能方便我猜测 mix 与 be ...

最新文章

  1. ★教师工资为什么这么低?/整理
  2. java中 queryparam_@PathParam 和 @QueryParam
  3. Duilib教程-控件练习
  4. kali安装docker和portainer
  5. 如何学计算机课程,一张图告诉你大学如何学好计算机专业课程
  6. 猜年龄 蓝桥 填空题2013省赛
  7. android java_Android开发和JAVA开发有什么区别?
  8. Win10专业版彻底禁用自动更新
  9. iOS从零开始,使用Swift:下一步去哪里
  10. 如何选择DDoS防御服务器
  11. RSF 分布式服务框架-服务端工作原理
  12. Jquery如何去掉复选框的勾
  13. MySql ORDER BY排序用法
  14. 从希腊神话到好莱坞大片,人工智能的七大历史时期值得铭记
  15. 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测
  16. JavaScript 实现一个通讯录
  17. 第十一讲 免费空间申请
  18. Python学习笔记3-Python开发工具
  19. 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)
  20. 生产和销售业务流程会计分录总结

热门文章

  1. 用word编辑论文——双栏下的脚注问题
  2. 如何获取和制作免费的icon图标素材
  3. BIND 的SRV记录
  4. OpenGL超级宝典visual studio 2013开发环境配置,GLTools
  5. 15位明星身家熊市缩水3亿 小巨人姚明市值缩水4500万 - 延展阅读-新华网
  6. AR 相机扫描效果实现
  7. Oracle 联表查询
  8. c#窗体应用计算机设计,C#实验报告:Windows窗体设计.doc
  9. 年度回忆录(?——2011.01)
  10. Python h5py