• DRF中的版本控制


    一、为什么要有版本

    某些客户端 使用低版本只维护不开发新功能 v1

    主要的产品还要不断的更新迭代功能 v2

    API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。 DRF提供了许多不同的版本控制方案。  

    二、DRF提供的版本控制方案

    DRF提供了五种版本控制方案,如下图:

    三、DRF版本控制系统的使用

    全局配置

    以 URLPathVersioning 为例,还是在项目的settings.py中REST_FRAMEWORK配置项下配置:

    REST_FRAMEWORK = {
        # 配置默认使用的版本控制类
        'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
        'DEFAULT_VERSION': 'v1',  # 默认的版本
        'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
        'VERSION_PARAM': 'version',  # 版本的参数名与URL conf中一致
    }

    urls.py中

    urlpatterns = [
        ...
        url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})),
        url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>d+)/$', views.PublisherViewSet.as_view({

    'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), ]

    我们在视图中就可以通过访问 request.version 来获取当前请求的具体版本,然后根据不同的版本来返回不同的内容:

    我们可以在视图中自定义具体的行为,下面以不同的版本返回不同的序列化类为例

    class BookViewSet(ModelViewSet):
        '''书籍'''
        queryset = models.Book.objects.all()
        serializer_class = BookModelserializer
    
        # 只要配置了版本在视图中就能通过 request.version 获得当前版本号
        def get_serializer_class(self):
            '''获取当前序列化类的方法'''
            # 根据版本的不同返回不同的序列化类
            print(self.request.version)
            if self.request.version == 'v1':
                return BookSerializerVersion1
            return BookModelserializer

    局部配置

    注意,通常我们是不会单独给某个视图设置版本控制的,如果确实需要给单独的视图设置版本控制,你可以在视图中设置versioning_class属性,如下:

    
    
    # 给单独的某个视图加版本控制(用的非常少)
    class PublisherViewSet(ModelViewSet):
        ...
    versioning_class
    = URLPathVersioning
  • 相关阅读:
    (三)openwrt主Makefile解析
    (二)我的Makefile学习冲动&&编译过程概述
    openwrt修改flash大小
    (一)openwrt源码目录概述
    git_sop 脚本使用说明
    Openwrt LuCI模块练习详细步骤
    openwrt简单ipk生成及Makefile解释
    oracle中比较两表表结构差异和数据差异的方法
    C#泛型集合之Dictionary<k, v>使用技巧
    SQL语句添加,删除主键
  • 原文地址:https://www.cnblogs.com/zwq-/p/10274126.html
Copyright © 2020-2023  润新知