使用版本控制时 drf-spectaulous 不起作用(规范中未定义任何操作!)

oz1*_*z19 2 versioning django-rest-framework drf-spectacular

几周前我安装了drf-spectacular. 一切正常,直到我在 DRF (Django Rest Framework)中启用版本控制。

我实施了AcceptHeaderVersioning并且它工作正常。但后来我意识到 Swagger 没有显示 /docs/ 处的端点,并且显示了这条消息:“规范中没有定义操作!”

如果我DEFAULT_VERSIONING_CLASSREST_FRAMEWORK设置中注释行,所有端点都会正确显示在 Swagger 文档页面 (/docs/) 中。但是,它破坏了我的版本控制:request.version = None.

我用AcceptHeaderVersioning、 以及URLPathVersioning和进行了测试NamespaceVersioning。他们所有人的结果都是一样的。

我读到这AcceptHeaderVersioning是一年前实施的。链接到此处的提交。

但我还了解到计划更改modify_for_versioning功能并且可能会影响标头版本控制。链接到管道模块中的功能,此处和对话此处。事实上,去年对该模块进行了很多更改,请查看此处

这些是我的 DRF 设置:

REST_FRAMEWORK = {
    # Auth
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],

    # Swagger/docs
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',

    # Pagination
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 5,

    # Testing
    'TEST_REQUEST_DEFAULT_FORMAT': 'json',

    # Versioning
    # https://www.django-rest-framework.org/api-guide/versioning/#configuring-the-versioning-scheme
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning',
    'DEFAULT_VERSION': None,
    'ALLOWED_VERSIONS': None,
    'VERSION_PARAM': 'version',
}
Run Code Online (Sandbox Code Playgroud)

问题

  1. 知道我做错了什么吗?有什么建议可以让两者一起工作(版本控制和招摇)吗?有什么建议么?
  2. drf-spectacular顺便说一句(这是次要问题,不是主要问题):是否可以在我自己的项目中启动测试?

提前致谢!

小智 5

问题 1:版本控制工作得很好。这是一个常见的错误。当SpectacularAPIView使用AcceptHeaderVersioning(via DEFAULT_VERSIONING_CLASS)进行版本控制时,从中获取架构的请求SpectacularAPIView可能不包含版本标头,因此您只能获得未版本控制的端点(在您的情况下没有)。

显式请求版本化架构/api/schema?version=v2或手动设置版本

path('api/schema/', SpectacularAPIView.as_view(api_version='v2'), name='schema'),
Run Code Online (Sandbox Code Playgroud)

常见问题解答入口

魔法发生的地方以及版本的使用顺序。

问题 2:python 轮子不包含测试。为此,您需要安装源包:https://pypi.org/project/drf-spectaulous/#files