如何将全局标头参数添加到 drf_spectaulous 中的所有 url 路径?

Meh*_*HMT 3 django swagger django-rest-framework http-accept-language drf-spectacular

我正在使用 drf_spectaulous 来使用 swagger 并且它工作正常。我为 API 视图定义所需的参数(无论是在路径中还是在标头中),如下所示:

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

但我不想将这些代码行添加到我的所有 API 视图中。是否有捷径可寻?(类似于在 SPECTACULAR_SETTINGS 中定义这些代码行)

我已经在 drf_spectaulous 的文档中找到了APPEND_COMPONENTS选项,但我对此并不熟悉。

JPG*_*JPG 5

您可以从中创建自定义架构类drf_spectacular.openapi.AutoSchema并重写该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
Run Code Online (Sandbox Code Playgroud)

然后将此类附加CustomAutoSchema到您的DEFAULT_SCHEMA_CLASS设置中

REST_FRAMEWORK = {
    # YOUR SETTINGS
    "DEFAULT_SCHEMA_CLASS": "path.to.your.custom.class.CustomAutoSchema",
}
Run Code Online (Sandbox Code Playgroud)