zoukankan      html  css  js  c++  java
  • rest-framework之版本控制

    1、作用

    用于版本的控制


    2、内置的版本控制类

    from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning
    
    #基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1
    #基于url的正则方式:URLPathVersioning------>/v1/users/
    #基于 accept 请求头方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0
    #基于主机名方法:HostNameVersioning------>v1.example.com
    #基于django路由系统的namespace:NamespaceVersioning------>example.com/v1/users/


    3、局部使用

    views.py

    from django.shortcuts import render
    from app01 import models
    from rest_framework.views import  APIView
    from rest_framework.response import  Response
    from rest_framework.viewsets import ModelViewSet
    
    # 导入模块,一般URLPathVersioning使用的较多
    from rest_framework.versioning import URLPathVersioning
    
    
    class Test(APIView):
        versioning_class = URLPathVersioning  # 局部使用版本控制类
    
        def get(self, request, *args, **kwargs):
            print(request.version)  # 打印出所使用的版本
            print(type(request.versioning_scheme)) # 打印出所使用的控制类
            return Response()
    
        def post(self, request):
            print(request.data)
            print(type(request.data))
            return Response()


    settings.py

    REST_FRAMEWORK = {
        'DEFAULT_VERSION': 'v1',            # 默认版本(从request对象里取不到,显示的默认值)
        'ALLOWED_VERSIONS': ['v1', 'v2'],   # 允许的版本
        'VERSION_PARAM': 'version'          # URL中获取值的key
    }


    urls.py

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # 允许v1或v2,默认是v1
        url(r'^(?P<version>[v1|v2]+)/test/', views.Test.as_view()),
    ]


    image

    image


    4、全局使用

    全局使用局部使用单独在视图类中添加了,直接在setting.py中添加版本控制类:

    REST_FRAMEWORK = {
        # 添加版本控制类(全局使用)
        'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
        'DEFAULT_VERSION': 'v1',            # 默认版本(从request对象里取不到,显示的默认值)
        'ALLOWED_VERSIONS': ['v1', 'v2'],   # 允许的版本
        'VERSION_PARAM': 'version'          # URL中获取值的key
    }
  • 相关阅读:
    05 drf源码剖析之认证
    04 drf源码剖析之版本
    03 drf源码剖析之视图
    02 drf源码剖析之快速了解drf
    OA之为用户设置角色和为用户设置权限
    EasyUI之datagrid的使用
    C#之反射
    EasyUI之Layout布局和Tabs页签的使用
    Memcached的使用
    Log4Net的简单使用
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12523742.html
Copyright © 2011-2022 走看看