博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRF基类APIView提供的Request、Response和序列化器的综合使用
阅读量:5246 次
发布时间:2019-06-14

本文共 2637 字,大约阅读时间需要 8 分钟。

关于DRF基类APIView提供的Request和Response对象的作用,可以看我的另一篇博文:

综合使用:

from django.http import HttpResponsefrom rest_framework import statusfrom rest_framework.response import Responsefrom rest_framework.views import APIViewfrom user.models import Departmentfrom user.serializers import DepartmentSerializerclass 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
\d+)$',views.DepartmentDetailAPIView.as_view())]

 

转载于:https://www.cnblogs.com/chichung/p/9940402.html

你可能感兴趣的文章
BZOJ做题记录[0512~?]
查看>>
sin之舞---蓝桥杯练习
查看>>
java Log4j日志配置详解大全
查看>>
es6中的promise对象
查看>>
Python中的strip用于去除字符串的首位字符。
查看>>
【宋红康程序思想学习日记5】数组排序之冒泡法
查看>>
apache页面压缩mod_gzip实现
查看>>
ubuntu部署vsftpd
查看>>
SQL语句
查看>>
js中 函数也是对象
查看>>
APICloud |UIChatTools 模块demo
查看>>
netstat命令
查看>>
学会做笔记-子弹笔记学习概要二
查看>>
常用Git命令清单(转)
查看>>
gulp使用笔记
查看>>
sqli-labs(less-11-16)
查看>>
Apache 访问测试
查看>>
Swift学习笔记(语法篇)-- String与Character类型
查看>>
五种I/O模型
查看>>
Jmeter处理数据库
查看>>