drf-Spectrum не работает при использовании управления версиями (в спецификации не определены операции!)

Несколько недель назад я установил. Все работало правильно, пока я не включил управление версиями в DRF (Django Rest Framework).

Я реализовал, и он работал правильно. Но потом я понял, что Swagger не показывает конечные точки в / docs /, и было показано это сообщение: «Никакие операции не определены в спецификации!» .

Если я прокомментирую DEFAULT_VERSIONING_CLASS линия в REST_FRAMEWORKнастройки, все конечные точки правильно отображаются на странице документации Swagger (/ docs /). Однако это нарушает мою версию: request.version = None.

Я тестировал как с 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',
}

Вопрос

  1. Есть идеи, что я делаю неправильно? Любые рекомендации по совместной работе (управление версиями и чванство)? Какие-либо предложения?
  2. И кстати (это второстепенный, а не главный вопрос): можно ли запустить drf-spectacular тесты в мой собственный проект?

Заранее спасибо!

1 ответ

Решение

Вопрос 1: Управление версиями работает нормально. Это частая ошибка. Когда используется версия AcceptHeaderVersioning (с помощью DEFAULT_VERSIONING_CLASS), запрос, извлекающий схему из SpectacularAPIView вероятно, не содержит заголовок версии, и поэтому вы получаете только неверсированные конечные точки (в вашем случае их нет).

Либо явно запросите схему с управлением версиями с помощью /api/schema?version=v2 или установите версию вручную с помощью

      path('api/schema/', SpectacularAPIView.as_view(api_version='v2'), name='schema'),

Запись в FAQ

Где происходит волшебство и в каком порядке используются версии.

Вопрос 2 : Колеса python не включают тесты. Для этого вам нужно будет установить исходный пакет: https://pypi.org/project/drf-spectacular/#files

Другие вопросы по тегам