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模块中的类的更高层次的封装,是为了更进一步的简化视图类的编写,从而实现返回所需的特定的序列化数据.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值