django中的版本控制

djanog为我们提供了五中版本的跟新的方法

  • 路由路劲
  • 域名更新
  • 通过路由传参
  • 通过请求头里面
  • 别名

下面采用的是通过路由的路径

在setting里面进行配置

REST_FRAMEWORK = {

    # 版本
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',  # 默认的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
    'VERSION_PARAM': 'version',  # 版本的参数名与URL conf中一致
}
  • 添加路由
# 参数必须和setting里面的VERSION_PARAM值一样
path('<str:version>/version/', Service.as_view(), name='version')
  • 视图
class Service(APIView):
    # 通过request.version来获取版本号
    def get(self,request,*args,**kwargs):
        if request.version =='v1':
            ctx = {
                'code':1,
                'msg':'ok',
                'data':{}
            }
        else:
            ctx = {
                'code': 2,
                'msg': 'ok',
                'data': {}
            }

        return JsonResponse(ctx)

类试图的版本控制

当我们使用类试图的是时候,我们获取版本号是,需要自己在视图里重写get_queryset方法

在setting里面进行配置

REST_FRAMEWORK = {

    # 版本
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',  # 默认的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
    'VERSION_PARAM': 'version',  # 版本的参数名与URL conf中一致
}
# view
class GameList(generics.ListCreateAPIView):

    serializer_class = GameSerializer

    def get_queryset(self):
        print(self.request.version)
        if self.request.version == 'v1':
            queryset = Game.objects.filter(status=1).all()
            return queryset
        else:
            queryset = Game.objects.filter(status == 0).all()
            return queryset
# 根级路由
    path('api/<str:version>/',include(('app07.urls','app07'))),
# 应用级路由
urlpatterns = [
    path('games/',GameList.as_view(),name='game-list'),
    path('games/<int:id>/',GameDetail.as_view(),name='game-detail')
]
发布了32 篇原创文章 · 获赞 2 · 访问量 236

猜你喜欢

转载自blog.csdn.net/qq_33759361/article/details/104811821
今日推荐