DRF基类APIView提供的Request、Response和序列化器的综合使用
关于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和序列化器的综合使用的更多相关文章
- DRF基类APIView的子类GenericAPIView
DRF的基类是APIView类,GenericAPIView类是APIView类的子类. GenericAPIView类有什么存在的意义呢? 其实, 他主要提供了两个用处: 1.提供关于数据库查询的属 ...
- DRF自带的Request和Response对象(DRF基类APIView)
# 转载请留言联系 1.Request对象 DRF传入视图的request对象,不再是Django默认的HttpRequest对象,而是扩展了HttpRequest类的Request类的对象. RES ...
- MVC Controller 基类 BaseController 中的 Request
今天修复mvc中的一个bug,需求是每个页面要获取当前URL链接中 host首是否正确,我把获取url的方法写到了Controller的基类BaseController(BaseController继 ...
- DRF项目之通过业务逻辑选择数据集和序列化器
在REST后台开发中,我们需要通过业务逻辑来选择数据集或者序列化器. 选择数据集: # 重写get_queryset实现通过业务逻辑选择指定数据集 def get_queryset(self): '' ...
- 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...
- DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集
复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...
- DRF视图-基类
2个视图基类 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 为了区分上面请求和响应的代码,我们再次创建一个新的子应用: python manage.py star ...
- 0014 基于DRF框架开发(02 基类视图 GenericAPIView)
前端于对数据操作的请求基本上就分为四类:增删改查,即增加.删除.修改.查询. 而DRF把前端请求分为两个大类:带ID参数请求和不带ID参数请求. 不带ID参数请求包括:增加.分布多条查询 带ID参数请 ...
- DRF视图-5个扩展类以及GenericAPIView基类
视图 5个视图扩展类 视图拓展类的作用: 提供了几种后端视图(对数据资源进行曾删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量. 这 ...
随机推荐
- 打包成exe程序
https://blog.csdn.net/harvic880925/article/details/27675073 当然针对这种exe文件,也可以解压出来得到具体的debug文件夹下的内容.
- 用Electron开发桌面应用app的相关文献集锦
1. 超棒的发声器(项目实战) 原文点此链接 2. Electron中文文档 原文点此链接
- 算法(3)Rotate Array
题目:将一个n个元素的数组右移k位,比如n=7,k=3,对数组[1,2,3,4,5,6,7]作如下旋转[5,6,7,1,2,3,4] 思路:[5,6,7,1,2,3,4],不知大家看出来了没有呢,两次 ...
- RadioGroup和GroupBox有什么区别?
我在RadioGroup中放RadioButton和GroupBox中一样,搞不明白. radiogroup有个item属性都是radio控件,不需要拖控件上去.groupbox需要自己拖控件 分组的 ...
- BZOJ4476 送礼物
这道题真是有趣呀. 其实就是一个分数规划问题,用一个二分加log来得去掉分母. 分四种情况讨论 1.lenth > L && num ( max ) > num ( min ...
- MySQL使用笔记(七)排序和限制数据记录查询
By francis_hao Dec 17,2016 排序数据记录查询 排序是指将筛选出符合条件的数据进行有序排放,有升序(ASC(默认))方式和降序(DESC)方式. mysql> se ...
- Codeforces Round #350 (Div. 2) A
A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- bzoj1814 Ural 1519 Formula 1(插头dp模板题)
1814: Ural 1519 Formula 1 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 924 Solved: 351[Submit][Sta ...
- [HNOI2003]消防局的设立 (贪心)
[HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达, ...
- JavaScript 被忽视的细节
语句/表达式 换个角度理解语句(statemaents)和表达式(expressions):表达式不会改变程序的运行状态,而语句会.还有一种叫做表达式语句,可以理解为表达式和语句的交集,如({a:1} ...