DRF的视图组件
DRF的视图组件
DRF的视图组件大概分以下几类
两大视图类
- APIView、GenericAPIView
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView
'''
APIView继承Django的View
1) View:将请求方式与视图类的同名方法建立映射,完成请求响应
2) APView:除了拥有View的功能之外,还有一些独有的功能
View的功能;
重写as_view禁用csrf认证;
重写dispatch:请求、响应、渲染、异常、解析、三大认证
多了一堆类属性,可以完成视图类的局部配置
'''
# GenericAPIView提供了三个方法:get_object()、get_queryset()、get_serializer()
from rest_framework.generics import GenericAPIView
class StudentGenericAPIView(GenericAPIView):
queryset = models.Student.objects.all() # 取到所有的学生对象,取到的是一个queryset对象,其实用这些工具我们至少都要定义一个queryset和一个serializer_class
serializer_class = serializers.StudentModelSerializer #
def get(self, request, *args, **kwargs):
stu_query = self.get_queryset()
stu_ser = self.get_serializer(stu_query, many=True)
return Response(stu_ser.data)
六大视图工具类
RetrieveModelMixin, ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin五大工具类
六大工具方法:retrieve、list、create、update、partial_update、destroy
from rest_framework import mixins
class StudentMixinGenericAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
queryset = models.Student.objects.all()
serializer_class = serializers.StudentModelSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
```
九大工具视图类
CreateAPIView, DestroyAPIView, ListAPIView, ListCreateAPIView, RetrieveAPIView, RetrieveDestroyAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView, UpdateAPIView
from rest_framework.generics import CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView class StudentMixinAPIView(CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView):
queryset = models.Student.objects.all()
serializer_class = serializers.StudentModelSerializer
# url中单查,不一定必须提供主键,下面的定义就是提供一个供查询的唯一键的字段名即可,当然,需要时表中有的字段,或者是外键字段
lookup_url_kwarg = 'id' # 有删除需求的接口继承DestroyAPIView,重写destroy完成字段删除,但其实这个方法没有太大必要,因为这种删除需求会彻底在库中删除数据,而在生产中我们一般只会给is_delet字段修改值而已,所以不需要这个方法,重写的时候只需要修改is_delete字段就好
def destroy(self, request, *args, **kwargs):
pass
两大视图集基类
ViewSet, GenerivViewSet
from rest_framework.viewsets import ModelViewSet
# 实际上ModelViewSet的源码里面是这么定义的,就是直接继承的mixins(视图工具类)里面的各种方法,几乎包含了所有的方法,除此之外还有一个仅用只读的Model视图集,名为ReadOnlyModelViewSet,
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
pass
# 该类只继承了单查和群查,所以
class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
mixins.ListModelMixin,
GenericViewSet):
pass
# 而两大大视图集基类均是继承自ViewSetMixin
class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
'''
可以自定义映射关系的GenericAPIView
'''
pass
class ViewSet(ViewSetMixin, views.APIView):
'''
可以自定义映射关系的APIView
'''
pass
'''
ViewSetMixin所完成的主要功能就是重写as_view()和view(),从而在url里面可以这样写映射关系,比如
as_view({
'get':'my_get',
'post':'my_post',
})
这样映射关系写过之后,前端发来的url的类型get和post就会映射到视图层的my_get和my_post,这两个方法都是写在View.py的响应方法里面
'''
```
DRF的视图组件的更多相关文章
- DRF之视图组件
不断的优化我们写的程序,是每个程序员必备的技能和职业素养,也是帮助我们成长的非常重要的手段. 使用serializer进行put接口设计 根据规范,PUT接口用来定义用户对数据修改的逻辑,也就是upd ...
- DRF之视图组件 三次封装
1.为什么要进行封装 1.1 在处理表的时候,如果有几十张表都需要增删改查查时,如果每一张表都写这些方法,会让代码显得冗余,所以需要将这些方法进行封装,然后不同的表都去继承这写方法.(这是思路) 1. ...
- DRF(5) - 频率组件、url注册器、响应器、分页器
一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...
- drf视图组件、认证组件
视图组件 1.基本视图 url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P<pk>\d+)/$', vi ...
- DRF 视图组件,路由组件
视图组件 -- 第一次封装 -- GenericAPIView(APIView): queryset = None serializer_class = None def ge ...
- 【DRF框架】视图组件
基于mixins视图类 from rest_framework import mixins # 创建视图 class CreateModelMixin(object) def create(self, ...
- DRF视图组件
DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...
- DRF 视图组件
目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...
- DRF(3) - 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件
一.序列化组件 基于上篇随笔的表结构,通过序列化组件的ModelSerializer设计如下三个接口: GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} PU ...
随机推荐
- (转)即时通讯IM OpenFire源码学习之三:在Eclipse中构建源码
转:http://blog.csdn.net/huwenfeng_2011/article/details/43412617 源码搭建 下载地址: 地址:http://www.igniterealti ...
- 2、Locust压力测试 实战
创建测试脚本 创建Test()类继承TaskSet类 创建beigong() 方法表示一个行为,访问北弓官网首页.用@task() 装饰该方法为一个任务.1表示一个Locust实例被挑选执行的权重,数 ...
- vim + ctag + Taglist (转)
一.ctag 当然,第一步就是要下载它!一条命令搞定: $sudo apt-get install ctags 如果不幸提示找不到软件包ctags,首先你也许应该update一下你的软件源,还不行的话 ...
- spring boot下WebSocket消息推送
WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...
- Java中的注解是如何工作的?
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...
- C# WinFrom 关于MDI
dev是一个牛B 到没边的控件 我们正常用winform做个原始mdi窗体 一点都不好看 但 用的dev只需要一个控件 就可让显示舒服多了 建一个项目 上边放一个 xtraTabbedMdiManag ...
- Python移动自动化测试面试✍✍✍
Python移动自动化测试面试 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- <python练习题>python练习题(常练勿忘)
学了python,去面试经常出现,某个或某些库不熟悉导则想不起来怎么写,知道思路而写不出来,多半还是不够熟悉,这里就作为熟悉python的地方,多做做题,多思考. 题目1:店铺ID为00000000- ...
- css渐变写法 从左到右渐变三种颜色示例;
background:linear-gradient(to right,#7f06a8,#a02bc2,#7f06a8)
- http://localhost:8080 is requesting your username and password
after you startup your tomcat, you type a concrete request url in broswer, the tomcat probably wil ...