DRF版本控制,提取不了版本信息

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()),

正则表达式 [v1|v2]+ 的意思是匹配 v、1、|、v、2 中的任意一个字符,重复一次或多次。这意味着,如果你访问 http;//localhost:8000/api/v2/version/,正则表达式将匹配 v、2 和 version,将 v2 作为 version 参数传递给视图函数。因此,request.version 和 request.versioning_scheme 将为 None。

要解决这个问题,你应该使用如下的正则表达式:

re_path(r'^(?P<version>v1|v2)/version/$', views.VersionView.as_view()),

这个正则表达式只匹配字符串 v1 或 v2 作为 version 参数,并将其传递给视图函数。