Как добавить параметр заголовка ко всем путям url в drf_spectacular?

Я использую drf_spectacular, чтобы иметь возможность использовать swagger, и он работает нормально. Я определяю необходимые параметры для моих представлений API (в пути или в заголовке) следующим образом:

@extend_schema(
    OpenApiParameter(
            name='accept-language',
            type=str,
            location=OpenApiParameter.HEADER,
            description="fa or en. The default value is en"
    ),
)

но я не хочу добавлять эти строки кода во все мои представления API. Есть ли простой способ сделать это? (Что-то вроде определения этих строк кода в SPECTACULAR_SETTINGS)

Я уже нашел опцию APPEND_COMPONENTS в документации drf_spectacular, но я с ней не знаком.

Вы можете создать пользовательский класс схемы из drf_spectacular.openapi и переопределить метод get_override_parameters(...) как

from drf_spectacular.openapi import AutoSchema

from drf_spectacular.utils import OpenApiParameter


class CustomAutoSchema(AutoSchema):
    global_params = [
        OpenApiParameter(
            name="accept-language",
            type=str,
            location=OpenApiParameter.HEADER,
            description="`fa` or `en`. The default value is en",
        )
    ]

    def get_override_parameters(self):
        params = super().get_override_parameters()
        return params + self.global_params

и затем присоедините этот CustomAutoSchema класс в вашей DEFAULT_SCHEMA_CLASS настройке

REST_FRAMEWORK = {
    # YOUR SETTINGS
    "DEFAULT_SCHEMA_CLASS": "path.to.your.custom.class.CustomAutoSchema",
}
Вернуться на верх