django中restframework中的版本

解决:通过参数传递版本号

 a. 通过url路径传参 

from rest_framework.versioning import URLPathVersioning

  b. url中通过GET传参

from rest_framework.versioning import QueryParameterVersioning

注:所有的版本类一定有 determine_version(self, request, *args, **kwargs) 方法,用于把版本获取到。

 

一。在URL路径中传参(推荐使用)

       1. 在settting中定义版本参数,有四个,一个全局的版本功能对象,一个默认的版本,一个允许的版本(如果是不允许的版本,会返回错误),一个传递的参数名称。

REST_FRAMEWORK = {
    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.QueryParameterVersioning",  # 设置全局版本功能
    "DEFAULT_VERSION":"v1",             # 默认的版本
    "ALLOWED_VERSIONS":['v1', 'v2'],    # 允许的版本
    "VERSION_PARAM":"version",          # 传递的参数名
}

      2. 在urls中定义要传递的版本名称:

urlpatterns = [
    url('^api/(?P<version>[v1|v2]+)/version/$', views.Version.as_view(), name='version'),
]

 

    3. 因为是全局设置,所以视图中不用设置也可以

class Version(APIView):
    def get(self, request, *args, **kwargs):
        print(request.version)        # 版本数据
        print(request.versioning_scheme)    # 版本对象,这里的对象是QueryParameterVersioning

        # 反向生成url, 参数viewname是url的名称
        u1 = request.versioning_scheme.reverse(viewname="version", request=request)
        # 结果是:http://127.0.0.1:8000/api/v2/version/

        return JsonResponse({"x":'x'})

 

    4. 效果:

    

二。URL中通过GET传参(不推荐)

    1. 在settting中定义版本参数,有三个,一个默认的版本,一个允许的版本(如果是不允许的版本,会返回错误),一个传递的参数名称。

REST_FRAMEWORK = {
    "DEFAULT_VERSION":"v1",             # 默认的版本
    "ALLOWED_VERSIONS":['v1', 'v2'],    # 允许的版本
    "VERSION_PARAM":"version",          # 传递的参数名
}

   2. 在视图views中填入 versioning_class 类参数(request.version是返回的参数结果)

from rest_framework.versioning import QueryParameterVersioning

class Version(APIView):
    versioning_class = QueryParameterVersioning
    def get(self, request, *args, **kwargs):
        print(request.version)                  #返回的版本结果
        print(request.versioning_scheme)    # 版本对象,这里的对象是QueryParameterVersioning
        return JsonResponse({"x":'x'})

   3. 结果如图

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值