django 4.1.3
djangorestframework 3.14.0
DRF使用版本控制:
request.version,request.versioning_scheme 打印为None,dir(request),又有这两个属性
url访问:http://localhost:8000/api/v2/version/
视图类:
class VersionView(APIView):
authentication_classes = []
def get(self, request, *args, **kwargs):
print(request)
# 1. 获取版本
print(request.version)
# 2. 获取处理版本的对象
print(request.versioning_scheme)
return Response('version')
路由:
urlpatterns = [
re_path(r'^(?P[v1|v2]+)/version/$' , views.VersionView.as_view()),
]
Setting:
REST_FRAMEWORK = {
# 版本控制
"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1", "v2"],
"VERSION_PARAM": 'version',
}
有帮助的话,请点关注~
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据你提供的代码和配置信息,问题可能在 urlpatterns 中的正则表达式上。
re_path(r'^(?P<version>[v1|v2]+)/version/$', views.VersionView.as_view()),
要解决这个问题,你应该使用如下的正则表达式:
re_path(r'^(?P<version>v1|v2)/version/$', views.VersionView.as_view()),
这个正则表达式只匹配字符串 v1 或 v2 作为 version 参数,并将其传递给视图函数。