drf框架学习一:视图类
drf框架的视图类梳理
drf框架官方文档:
https://www.django-rest-framework.org/
drf框架对django中的视图类进行了多层的封装,可以很方便的写视图层逻辑来满足我们的需求
主要模块有:
- views模块
- generic模块
- mixins模块
- viewsets模块
1.views模块
views模块主要是对django中的View类进行了封装–变成APIView类;在编写视图函数的时候,通过继承该类,可以很快速的对模型数据进行序列化输出.
代码如下:
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import UsersSerializer
#序列化模型,返回的drf框架自带的web页面
class UsersSerializerView(APIView):
'''
users information.
'''
def get(self, request):
users = Users.objects.all()[:3]
users_serializer = UsersSerializer(users, many=True)
return Response(users_serializer.data)
2.mixins模块
mixins模块主要提共了一些自定义的类,这些类中对应了特定的方法,如:list,create,update等,通过这些方法我们可以获取我们想要的序列化列表,或某一条序列化信息等;
主要包含五大类:
- CreateModelMixin类–定义了create方法,可以创建一个模型类实例数据
- ListModelMixin类–定义了list方法,获取所有模型实例的数据
- RetrieveModelMixin类–定义了retrieve方法,获取当个模型实例的数据
- UpdateModelMixin类–定义了update方法,更新模型实例的数据
- DestroyModelMixin–定义了delete方法,删除一个实例的数据
3.generic模块
generic模块主要是对views模块中的APIview视图类进行了再次封装–形成了GenericAPIView类,封装了相关属性如:query_set,serializer_class等,新增了数据分页功能,再进一步的简化了视图类的代码;
from rest_framework import mixins
from rest_framework import generics
class UsersSerializerView(mixins.ListModelMixin, generics.GenericAPIView):
'''
users all information.
'''
queryset = Users.objects.all().order_by('id')
# 指定数据序列化类
serializer_class = UsersSerializer
#pagination_class = UsersPaginatorView
def get(self, request, *args, **kwargs):
# 直接返回mixins中的list方法即可返回,指定模型的所有数据
return self.list(request, *args, **kwargs)
另外,generic模块还将mixins模块中的类和GenericAPIView类结合在一起,封装了更高层的几个类,这样就可以将http方法和mixins中的特定的方法绑定,更加简化视图类
主要的类有:
- CreateAPIView–继承了mixins.CreateModelMixin,GenericAPIView同时将post方法和create绑定
- ListAPIView–继承了mixins.ListModelMixin,GenericAPIView同时将get方法和list绑定
这样在编写上面的类视图代码中就可以直接省去了get方法:
class UsersSerializerView(ListAPIView):
'''
users all information.
'''
queryset = Users.objects.all().order_by('id')
# 指定数据序列化类
serializer_class = UsersSerializer
4.viewsets模块
viewsets模块中主要包含了自定义了ViewSetMixin类,GenericViewSet类,ModelViewSet类:
- ViewSetMixin类重写了as_view方法,这样在写路由的时候就可以将http方法和特定了方法绑定(如{get:list, post:create})
- GenericViewSet类继承了ViewSetMixin类和GenericAPIView类
- ModelViewSet类继承了mixins模块中的各个类和GenericViewSet类
优化了路由配置,更简化了视图类的编写:
from rest_framework import viewsets
class UsersSerializerView():
'''
users all information.
'''
queryset = Users.objects.all().order_by('id')
# 指定数据序列化类
serializer_class = UsersSerializer
利用router模块简化路由配置:
from rest_framework.routers import DefaultRouter
from users.views import UsersSerializeView
# 实例化一个router类
router = DefaultRouter()
# 将路由地址注册到router实例
router.register(r'users', UsersSerializerViewSet, basename='users')
urlpatterns = [
path('', include(router.urls)),
]
总结:
views模块和mixins模块是drf框架中出来视图的两个基本的类,其他的generic模块和viewsets模块都是针对views模块中的类和mixins模块中的类的更高层次的封装,是为了更进一步的简化视图类的编写,从而实现返回所需的特定的序列化数据.
上一篇: DRF视图
下一篇: 多线程的实际应用场景
推荐阅读
-
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
-
Android开发之图形图像与动画(一)Paint和Canvas类学习
-
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
-
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
-
drf框架serializers中ModelSerializer类简化序列化和反序列化操作
-
drf框架中所有视图及用法
-
Mbp,一个用于学习.net core的开发框架
-
angular学习一框架结构认识
-
介绍一个简单的JavaScript类框架
-
一步一步学习PHP(5) 类和对象