关于DRF基类APIView提供的Request和Response对象的作用,可以看我的另一篇博文:https://www.cnblogs.com/chichung/p/9939864.html

综合使用:

from django.http import HttpResponse
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from user.models import Department
from user.serializers import DepartmentSerializer class DepartmentListAPIView(APIView):
def get(self,request):
"""查询多条数据"""
dep = Department.objects.all()
# 创建序列化器对象
serializer = DepartmentSerializer(instance=dep,many=True)
# 序列化:对象->字典
data_dict = serializer.data
# DRF的Response对象可以把字典转换为请求头指定的格式返回
return Response(data=data_dict) def post(self,request):
"""新增一条数据"""
# DRF的Request对象直接把接受到的值转换为字典
data_dict = request.data
# 创建序列化器对象
serializer = DepartmentSerializer(instance=None,data=data_dict)
# 校验校验不通过,抛异常(反序列化的功能)
serializer.is_valid(raise_exception=True)
# 反序列化,把字典的数据存进数据库
serializer.save()
# restful风格,新增要返回新增数据的那一列内容。用了序列化,把对象转换为字典,同时Response处理。
return Response(data=serializer.data) class DepartmentDetailAPIView(APIView):
def get(self,request,pk):
"""查询一条数据"""
# 查询出该条数据的对象
try:
dep = Department.objects.get(id=pk)
except Department.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
# 创建序列化器对象
serializer = DepartmentSerializer(instance=dep)
# 序列化,把对象转换为字典,同时Response根据请求头返回相应的格式
return Response(data=serializer.data) def post(self,request,pk):
"""修改部门"""
# DRF的Request对象直接把接受到的值转换为字典
data_dict = request.data
# 查询出要修改的数据
try:
dep = Department.objects.get(id=pk)
except Department.DoesNotExist:
return HttpResponse(status=404)
# 创建序列化器对象
serializer = DepartmentSerializer(instance=dep,data=data_dict)
# 反序列化,校验参数是否正确,若不正确,抛异常
serializer.is_valid(raise_exception=True)
# 反序列化,把字典的数据存进数据库
serializer.save()
# 序列化,把对象转换为字典。同时DRF的Response对象根据请求头返回相应的格式
return Response(serializer.data) def delete(self,request,pk):
"""删除一个部门"""
try:
dep = Department.objects.get(id=pk)
except Department.DoesNotExist:
return HttpResponse(status=404)
dep.delete()
return Response(status=status.HTTP_204_NO_CONTENT)

相应路由的配置:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^departments$',views.DepartmentListAPIView.as_view()),
url(r'^departments/(?P<pk>\d+)$',views.DepartmentDetailAPIView.as_view())
]

DRF基类APIView提供的Request、Response和序列化器的综合使用的更多相关文章

  1. DRF基类APIView的子类GenericAPIView

    DRF的基类是APIView类,GenericAPIView类是APIView类的子类. GenericAPIView类有什么存在的意义呢? 其实, 他主要提供了两个用处: 1.提供关于数据库查询的属 ...

  2. DRF自带的Request和Response对象(DRF基类APIView)

    # 转载请留言联系 1.Request对象 DRF传入视图的request对象,不再是Django默认的HttpRequest对象,而是扩展了HttpRequest类的Request类的对象. RES ...

  3. MVC Controller 基类 BaseController 中的 Request

    今天修复mvc中的一个bug,需求是每个页面要获取当前URL链接中 host首是否正确,我把获取url的方法写到了Controller的基类BaseController(BaseController继 ...

  4. DRF项目之通过业务逻辑选择数据集和序列化器

    在REST后台开发中,我们需要通过业务逻辑来选择数据集或者序列化器. 选择数据集: # 重写get_queryset实现通过业务逻辑选择指定数据集 def get_queryset(self): '' ...

  5. 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...

  6. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  7. DRF视图-基类

    2个视图基类 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 为了区分上面请求和响应的代码,我们再次创建一个新的子应用: python manage.py star ...

  8. 0014 基于DRF框架开发(02 基类视图 GenericAPIView)

    前端于对数据操作的请求基本上就分为四类:增删改查,即增加.删除.修改.查询. 而DRF把前端请求分为两个大类:带ID参数请求和不带ID参数请求. 不带ID参数请求包括:增加.分布多条查询 带ID参数请 ...

  9. DRF视图-5个扩展类以及GenericAPIView基类

    视图 5个视图扩展类 视图拓展类的作用: 提供了几种后端视图(对数据资源进行曾删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量. 这 ...

随机推荐

  1. C#的Response.BinaryWrite图片乱码问题

    今天学习Response对象,该对象的有很多的输出方式,其中有一个binaryWrite可以输出图片,但是在输出图片一开始出现了乱码,后来通过百度得到解决: 代码: FileStream stream ...

  2. oop &&GP 模板 ---> 特化和偏特化

    OOP面向对象编程 GP泛型编程(generic programming) 两者的主要区别就是OOP将数据和对数据的操作放在一起, GP就是将数据和操作独立开来 GP:   数据就是container ...

  3. HDU 1338 Game Prediction

    http://acm.hdu.edu.cn/showproblem.php?pid=1338 Problem Description Suppose there are M people, inclu ...

  4. 当网卡收到的包的目的地址是主机上另一个网卡的地址.arp总结

    2019/01/13 今天测试发现结果不符合预期呀,发现设置了arp_filter之后,仍然是能ping通主机上的另外一张网卡.但是现在的问题是 -------------------- 内核中是如何 ...

  5. 制作用于日期时间型字段的DELPHI数据感知控件

    用DELPHI开发C/S应用方便而快速,因为它拥有大量易于使用的数据访问和数据感知控件.然而万事总是难以完美,DELPHI的DBEdit控件用于输入日期时间型字段却很不方便,为了改善这一缺点,笔者开发 ...

  6. BZOJ 2005 2005: [Noi2010]能量采集 | 容斥原理

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题解: http://blog.csdn.net/popoqqq/article/de ...

  7. BZOJ2286 [Sdoi2011]消耗战 【虚树 + 树形Dp】

    2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 4261  Solved: 1552 [Submit][Sta ...

  8. 【BZOJ 2241 打地鼠】

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1430  Solved: 908[Submit][Status][Discuss] Descripti ...

  9. BZOJ 4777 Usaco2017 Open Switch Grass Kruskal+替罪羊树+权值线段树

    这道题首先可以看出答案一定是一条边,而且答案一定在最小生成树上,那么我们就可以在这个最小生成树上维护他与异色儿子的边最小值,所以我们就可以已通过Kruskal和一棵平衡树来解决,时间复杂度是O(n*l ...

  10. 湖南大学第十四届ACM程序设计新生杯 Dandan's lunch

    Dandan's lunch Description: As everyone knows, there are now n people participating in the competiti ...