zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    React创建组件的方式
    react jsx语法
    mui区域滚动失效的问题
    css3 currentColor
    http协议
    iframe用法
    html关于强制显示、隐藏浏览器的滚动条
    null与undefind的区别(转)
    如何实现背景透明,文字不透明,兼容所有浏览器?
    事件委托
  • 原文地址:https://www.cnblogs.com/Rivend/p/12057823.html
Copyright © 2011-2022 走看看