zoukankan      html  css  js  c++  java
  • 93 restframework的视图组件, 路由组件, 版本控制

    主要内容:

    1  视图组件:
     a : 第一次封装: GenericAPIView:
      设置query_set和serializers_clas
      获取值得两种方法
      封装视图类ListModelMixin
        ...
      各个视图方法封成
      视图:  

     class BookView(ListCreateAPIView):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
        def get(self, request):
        return self.list(request)

     b : 第二次封装:
      写了两个类, 方便继承
     c : 第三次封装
      ViewSetMixin, 重写了as_view方法
      执行self.dispatch()方法前, 把self.get = list
      在ViewSetMixin后可以传参数

      由于as_view不能传参数, 所以引了rest_framework.
      from rest_framework.viewsets import ViewSetMixin
      viewsets重写了as_view方法, 参数被acton接收
      重新分发把list给了get, 然后再执行dispatch方法, 执行getpost方法

        注意点:

    如果用restframework写的modelviewset方法, 此时关键字是pk, 不能用id
    url(r'^book/(?P<pk>d+)$', views.BookModelView.as_view({"get": "retrieve", "put": "update", "delete": "destroy"})),

    2 : 路由组件

      a : 路由组件的使用:

    # 帮助我们生成带参数的路由
    from rest_framework.routers import DefaultRouter
    # 实例化DefaultRouter对象
    router = DefaultRouter()
    # 注册我们的路由以及视图
    router.register(r'^book', BookModelView)
    
    urlpatterns += router.urls
    

      b : 源码流程:

         从defaultrouter进去

        找到get_url, 走到父类的get_url

    3  版本控制:

        版本不同信息不同,
        前端传来的版本号, 后端做处理
        匹配到真正的视图之前, 做好版本控制
        在封装request之后, 在分发视图之前

     # 初始化我们的版本
    			version, scheme = self.determine_version(request, *args, **kwargs)
    			request.version, request.versioning_scheme = version, scheme
    		--  def determine_version(self, request, *args, **kwargs):
    				if self.versioning_class is None:
    					return (None, None)
    				scheme = self.versioning_class()
    				# scheme我配置的版本控制类的实例化对象
    				# 调用了determine_version(request, *args, **kwargs)
    				# 把方法的返回值给version
    				return (scheme.determine_version(request, *args, **kwargs), scheme)
    					
    

      

     

  • 相关阅读:
    JQuery:JQuery语法、选择器、事件处理
    循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
    高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
    DB2数据库性能调整和优化(第2版)
    金融工程中的蒙特卡罗方法
    代数学教程
    拓扑线性空间与算子谱理论
    李代数(第2版)
    编程的修炼(中英双语)
    iOS应用开发详解
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9984794.html
Copyright © 2011-2022 走看看