从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

Django rest 版本控制v1/v2

发布:蔺要红12-06分类: Python

# from rest_framework.versioning import * 提供了 5 中方式 具体可以从源码中查看
URLPathVersioning 使用方式
# setting
REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',       # 默认的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
    'VERSION_PARAM': 'version',        # 版本的参数名与 URL conf中一致
}
# 视图
class VersionView(APIView):
    def get(self, request, *args, **kwargs):
        print(request.version)
        if request.version == 'v1':
            ctx = {"code": 1, "msg": "ok", "data": {}}
            return JsonResponse(ctx)
        else:
            ctx = {"code": 2, "msg": "ok", "data": {}}
            return JsonResponse(ctx)
# 类视图
class GameList(generics.ListCreateAPIView):
    serializer_class = GameSerializer

    # 版本过滤
    def get_queryset(self):

        if self.request.version == 'v1':
            queryset = Game.objects.filter(status=1).all()
        else:
            queryset = Game.objects.filter(status=0).all()
    return queryset
    # 也可以重写序列化类
    # def get_serializer_class(self):


# url 通用视图 配置方式
router = DefaultRouter()
router.register(r'students', views.StudentViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'games', app04.GameViewSet)

urlpatterns = [
    path('api/<str:version>/', include(router.urls)),
    path('api/<str:version>/', include(('app06.urls', 'app06'), namespace='app06')),
    ......
]
# app url配置
urlpatterns = [
    path('carts/', views.CartView.as_view(), name='cart-list'),
    path('login/', views.LoginView.as_view(), name='login'),
    path('version/', views.VersionView.as_view(), name='version'),

]
#用法
http://127.0.0.1:8003/app05/v2/carts/ 
http://127.0.0.1:8003/app05/v2/version/
#-------------------------------------------------------------------------
# 版本 配置到 app url也可以
urlpatterns = [
    path('carts/', views.CartView.as_view(), name='cart-list'),
    path('login/', views.LoginView.as_view(), name='login'),
    path('<str:version>/version/', views.VersionView.as_view(), name='version'),
]
# 用法
http://127.0.0.1:8003/app05/carts/ 
http://127.0.0.1:8003/app05/v2/version/


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站