关于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. Truffle基础篇-Truffle做什么的?怎么安装?

    Truffle基础篇-Truffle做什么的?怎么安装? truffle资料汇总 http://truffle.tryblockchain.org/truffle3.0-integrate-nodej ...

  2. [Java-Idea]解决idea启动项目报错:Unable to open debugger port(127.0.0.1:53046):java.net.SocketException"socket closed

    命令行窗口,执行命令:netstat -aon|findstr 9030 查找占用端口的进程 taskkill -f -pid 11331

  3. liniux备忘录-磁盘配额与进阶文件系统管理

    知识 磁盘配额Quota 可以限制磁盘的使用容量,可以对用户.群组磁盘的最大使用容量. 磁盘配额Quota的使用限制 只能针对整个文件系统. 核心必须支持Quota. 自行编译的核心需要注意 Quot ...

  4. html5实现web app摇一摇换歌

    微信可以摇歌曲,根据声音识别出歌曲,然后返回歌曲信息,利用html5的deviceOrientation特性和deviceMotion事件也可以在web app上实现类似于微信摇一摇的功能,原生的ap ...

  5. Java——异常博客作业

    本次任务地址 6. 为如下代码加上异常处理 6.1 改正代码,并增加如下功能.当找不到文件时,需提示用户找不到文件xxx,请重新输入文件名,然后尝试重新打开. 如果是其他异常则提示打开或读取文件失败! ...

  6. Spark中如何生成Avro文件

    研究spark的目的之一就是要取代MR,目前我司MR的一个典型应用场景即为生成Avro文件,然后加载到HIVE表里,所以如何在Spark中生成Avro文件,就是必然之路了. 我本人由于对java不熟, ...

  7. ELK + Kafka + Filebeat

    ELK + Kafka + Filebeat学习 https://blog.csdn.net/qq_21383435/article/details/79463832 https://blog.csd ...

  8. hdu 1856 More is better (并查集)

    More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) ...

  9. oracle 导入导出语句

    imp USERID/PSD@SID file='D:\1.dmp' full=y statistics=none exp USERID/PSD@SID file='D:\1.dmp' tables= ...

  10. 使用HTML实现对汉字拼音的支持

    <!DOCTYPE HTML><html> <head> <meta charset="utf-8"> <title>无 ...