Django REST framework版本控制

参考链接:https://www.cnblogs.com/liwenzhou/p/10269268.html

 

1.路由:

   #版本控制
    re_path('^(?P<version>[v1|v2]+)/books/$', views.BookView.as_view()),  # View(request) ======APIView:dispatch()
    re_path('^(?P<version>[v1|v2]+)/book/(?P<id>\d+)/$', views.BookDetaiView.as_view(),name='books'),  # View(request) 

 

2.setings页面配置全局

REST_FRAMEWORK = {
# 版本控制
    'DEFAULT_VERSION': 'v1',  # 默认的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
    'VERSION_PARAM': 'version',  # 版本的参数名与URL conf中一致

}

 

3.视图中应用:

# 版本控制
from app01.utils import *
class BookView(APIView):
    def get(self, request, *args, **kwargs):
        print(request.version)  # 获取当前版本
        book_list = models.Book.objects.all().order_by("id")
        # 根据不同版本返回不同的序列化类
        if request.version =='v1':
            bs = BookModelSerializers(instance=book_list, many=True,
                                      context={'request': request})  

          # 在做链接的时候需要添加context参数
            return Response(bs.data)
        else:
            publish = models.Publisher.objects.all()
            # data put serializers data packging
            bs = PublishModelSerializers(publish, many=True)  # many=True多个对象
            return Response(bs.data)

 

局部配置(一般不用)

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

class PublisherViewSet(ModelViewSet):

    ...
    versioning_class = URLPathVersioning
posted @ 2019-12-18 01:57  Mr_Riven  阅读(322)  评论(0编辑  收藏  举报