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 ...
随机推荐
- [SCOI2009]迷路(矩阵快速幂) 题解
Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...
- angularjs 中实现 load more 功能
在UI 我们经常需要render 一些集合, 如果集合数据过多,那我们可能会采取分页的解决方案,本文是另外一种解决方法,就是当集合数量大于一定数量的时候显示一个 加载更多按钮,点击后,自动加载指定数量 ...
- goroutine 需要注意的一个小细节
虽然goroutine 是并发执行的,但是它们并不是并行运行的.如果不告诉Go 额外的东西,同一时刻只会有一个goroutine 执行.利用runtime.GOMAXPROCS(n) 可以设置goro ...
- robotframework 时间控件的操作的几种方法总结。
- 用Nginx搭建CDN服务器方法-开启Nginx缓存与镜像,自建图片服务器
利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据”域名 ...
- 24. Jmeter GUI 及NON GUI实现分布式
什么是分布式: Jmeter的集群模式可以让我们将多台机器联合起来一起产生负载,从而弥补单台机器负载生成能力不足的问题. 假设我们的测试计划会产生100个threads,我们使用6台机器进行分布式测试 ...
- CodeForces-1249C2-Good Numbers (hard version) -巧妙进制/暴力
The only difference between easy and hard versions is the maximum value of n. You are given a positi ...
- 关于Web中的图标使用问题
挺懒的,这里做个记录. Web中的图标使用问题 : https://github.com/amfe/article/issues/2
- Asp.net Core + Log4net + ELK 搭建日志中心
原文:Asp.net Core + Log4net + ELK 搭建日志中心 Docker中一键安装ELK 对于这种工具类的东西,第一步就直接到docker的hub中查找了,很幸运,不仅有Elasti ...
- 要素选择变化事件 IActiveViewEvents_SelectionChanged
void IDockableWindowDef.OnCreate(object hook) { m_application = hook as IApplication; m_hookHelper = ...