zoukankan      html  css  js  c++  java
  • DRF 之 版本控制

    1、版本控制是干什么用的,为什么要有版本?

      我们都知道每一个程序都是有版本的。而且版本也会升级从v1升级到v2、v3、v4·····,但是我们不可能因为新版本出现旧版本就不去维护,因为用户有权选择不更新版本。所以我们就需要对版本进行控制,这个DRF也给我们提供了一些封装好的方法。

    2、在版本的源码中遨游

      2.1 先看APIView中,有个initial方法

      2.2 点击initial进入,我们可以看到将版本信息version 和 版本控制方案scheme 分别赋值给了request.version 和 request.determine_version.

        self.determine_version 这个方法是找我们自己定义的版本控制类,没有的话就返回(None,None)

      其实这个版本控制方案就是我们配置的版本控制的类,也就是说,APIView通过这个方法初始化了自己提供的组件

      2.3 在rest_framework.versioning里查看版本控制类的方法。

       

    3、具体用法

      以URL上携带版本信息为例

      3.1 第一步

        先自定义一个版本控制类

    class MyVersion(object):
        def determine_version(self, request, *args, **kwargs):
            version = request.query_params.get("version")
            if not version:
                version = 'v1'
            return version
    自定义一个版本控制类

      3.2 第二部  在配置文件中注册

    REST_FRAMEWORK = {
        # 这个是默认使用的版本控制类
        "DEFAULT_VERSIONING_CLASS": "utils.version.MyVersion",     # 这个版本控制类的路径。
        # 默认使用的的版本 
        'DEFAULT_VERSION': 'v1',
        # 允许使用的版本
        'ALLOWED_VERSIONS': ['v1','v2'],
        # 版本使用的参数名称
        'VERSION_PARAM': 'version'
    }
    配置seting.py

      3.3 在url中写路由

    # 这个urls 总urls中的 
    urlpatterns = [
        url(r'^version/', include('Version_Demo.urls'))    # 这里用了路由分发  
    ]
    # 这个urls是Version_Demo的app中的
    urlpatterns = [
        url(r'^demo/', Version_Demo.as_view()),
    ]
    urls.py

      3.4 试图测试

    class Version_Demo(APIView):     # 要继承APIView ,因为version是在APIView中的
        def get(self, request):
            print(request.version)
            if request.version == 'v2':
                print(request.version)
                return Response('这是v2版本')
            return Response('这是v1版本')
    试图测试
  • 相关阅读:
    利用相关的Aware接口
    java 值传递和引用传递。
    权限控制框架Spring Security 和Shiro 的总结
    优秀代码养成
    Servlet 基础知识
    leetcode 501. Find Mode in Binary Search Tree
    leetcode 530. Minimum Absolute Difference in BST
    leetcode 543. Diameter of Binary Tree
    leetcode 551. Student Attendance Record I
    leetcode 563. Binary Tree Tilt
  • 原文地址:https://www.cnblogs.com/wf123/p/9986192.html
Copyright © 2011-2022 走看看