首页 > 其他 > 详细

Django REST framework基础:版本控制

时间:2019-11-20 10:37:29      阅读:63      评论:0      收藏:0      [点我收藏+]

DRF的版本控制

为什么需要版本控制

API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。 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 PublisherViewSet(ModelViewSet):

    def get_serializer_class(self):
        """不同的版本使用不同的序列化类"""
        if self.request.version == v1:
            return PublisherModelSerializerVersion1
        else:
            return PublisherModelSerializer
    queryset = models.Publisher.objects.all()

 

局部配置

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

class PublisherViewSet(ModelViewSet):

    ...
    versioning_class = URLPathVersioning

 

 

 

 

 

 

 

 

 

Django REST framework基础:版本控制

原文:https://www.cnblogs.com/huay/p/11895648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!