Django Rest Framework - Как реализовать различные схемы на основе действия запроса в функциональных представлениях? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь отобразить функциональное представление на странице пользовательского интерфейса Swagger.Представление является частью устаревшего кода (реального, а не того, что показан ниже) и поддерживает операции GET и POST.

@schema(foo_schema)
def foo(request):
    if request.method == 'GET':
        param1 = request.query_params.get('param1')
        # do something
    elif request.method == 'POST':
        param1 = request.data.get('param1')
        # do something
    ...

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

foo_schema = AutoSchema(
    manual_fields=[
        coreapi.Field(
            name='param1',
            location='query',
            required=True,
            schema=coreschema.Integer(),
        ),
        coreapi.Field(
            name='param1',
            location='formData',
            required=True,
            schema=coreschema.Integer(),
        ),
        ...
    ]
)

Проблема в том, что пользовательский интерфейс swagger отображает поле только один раз, как данные формы.Таким образом, даже если бы я попытался получить доступ к конечной точке через swagger с запросом GET, параметр был бы включен в переменную request.data, а не в request.query_params, как если бы введенные данные всегда были частью запроса POST,Точно так же, если бы я удалил в схеме спецификацию второго поля, параметр всегда был бы в request.query_parames, как если бы запросы всегда были GET.

Как мне указать оба поля в сваггере?Или лучше, как мне показать только одно поле, но убедиться, что параметры GET переходят в request.query_params, а параметры POST переходят в request.data?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...