通常情况
通常我们直接调用rest框架提供给我的方法就够用了
rest框架提供的版本控制类,其中有5个类可以调用包含:host头携带版本、协议头携带版本、路由携带、namespace携带一般情况都用QueryParameterVersioning
如下示例
配置文件
'''rest框架提供的版本控制类,其中有5个类可以调用包含:host头携带版本、协议头携带版本、路由携带、namespace携带'''
REST_FRAMEWORK = {
"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.QueryParameterVersioning", # 【推荐】调用框架封装的类,就可以注释掉自己写的了
# "DEFAULT_VERSIONING_CLASS": "versionDemo.utils.version.MyVersion", # 如果是自己写的,就写入路径即可
"DEFAULT_VERSION": "v1", # 默认版本
"ALLOWED_VERSIONS": "v1,v2", # 允许的版本
"VERSION_PARAM": "version", # 关键字设置一般不用管
}
视图函数
class DemoView(APIView):
def get(self, request,*args,**kwargs):
print(request.version)
print(request.versioning_scheme)
# 取到版本号,根据版本不同,返回不同信息
if request.version == "v1":
return Response("这是v1版本数据")
elif request.version == "v2":
return Response("这是v2版本数据")
return Response('版本不存在')
当然也可以自己写 版本控制【不推荐】
class MyVersion(object):
"""必须重构determine_version方法"""
def determine_version(self, request, *args, **kwargs):
# 返回给了 request.version
# 返回版本号
# 版本号,在url中获取
version = request.query_params.get("version", "v1") # 默认返回v1
return version