Django drf-yasg swagger обязательный параметр заголовка LOCALE для каждого маршрута

Возможно ли сделать параметр header locale обязательным для каждого URL в приложении. Могу ли я добиться этого, установив его в глобальной конфигурации или в каждом методе представления, и если да, то как я могу это сделать?

Вы не предоставили никаких подробностей о том, как выглядит ваше представление, поэтому я предположу, что оно основано на функциях, а не на классах, но это решение можно легко реализовать на cbv.

Сделать заголовок частью swagger можно следующим образом:

# making a header parameter

from drf_yasg import openapi

header_param = openapi.Parameter('local',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)

# calling it on view

@swagger_auto_schema(manual_parameters=[header_param])
@api_view(['GET', 'PUT', 'POST'])
def test_view(request, pk):

Поскольку вы хотите, чтобы это было для каждого представления, одним из решений является создание папки utils для создания вспомогательных методов. создайте вспомогательный метод, например:

# utils.py
from drf_yasg import openapi

def get_header_params(self):
    header_param = openapi.Parameter('local',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)
 
    return [header_param]

С помощью этого вы можете вызывать этот метод в каждом представлении, например:

# views.py

from utils.get_header_param

@swagger_auto_schema(manual_parameters=get_header_param())
@api_view(['GET', 'PUT', 'POST'])
def test_view(request, pk):
    # your code

@swagger_auto_schema(manual_parameters=get_header_param())
@api_view(['GET', 'PUT', 'POST'])
def test_view_2(request, pk):
    # your code

для получения дополнительной помощи вы всегда можете просмотреть фактическую документацию: https://drf-yasg.readthedocs.io/en/stable/custom_spec.html#the-swagger-auto-schema-decorator

Если вы начали этот проект, то я советую использовать drf-spectacular вместо этого, даже yasg и django рекомендуют его для будущих проектов.

Попробовал ответ, предоставленный Moheb, и он сработал. Но при последующей попытке swagger UI показал поле ввода для переменной, но я не смог увидеть значения в request.headers. После долгих поисков я понял следующее: при определении локального/настраиваемого параметра заголовка, как указано в ответе, убедитесь, что имя переменной не содержит подчеркивания. Например, приведенный ниже код не передаст значение параметра, поскольку его имя local_first, а не localfirst

 header_param = openapi.Parameter('local_first',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)

Итак, правильный код, который сработал у меня:

 header_param = openapi.Parameter('localfirst',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)
Вернуться на верх