Разве django-rest-swagger не работает с moderializers?

Я отправился с документацией на django-rest-swagger страница github, точнее, часть под названием "Как это сделать работает". Он показывает, что вы можете определить свои собственные параметры для вашего априори отдыха, и эти параметры отображаются на вашей странице документа swagger.

Пример комментария выглядит примерно так:

"""    
This text is the description for this API    
param1 -- A first parameter    
param2 -- A second parameter    
"""    

Я могу заставить это работать, но моя проблема заключается в том, как указать, требуется ли переменная, ее тип параметра и тип данных. На странице github отображается примерное изображение о том, как может выглядеть ваш документ swagger, и у них есть информация, о которой я только что упомянул. Но когда я комментирую свои пользовательские параметры, как показано на примере, мои параметры просто отображаются как тип параметра: "запрос", тип данных: пуст, и он не отображается "обязательно".

Ближайшая вещь, которую я нашел для ответа, была в qaru.site/info/450214/.... Похоже, что поставщик ответов говорит, что django-rest-swagger генерирует свою документацию, автоматически проверяя ваши сериализаторы (что хорошо), и что моделиризаторы не будут содержать достаточной информации для django-rest-swagger, чтобы правильно вывести критерии, упомянутые мной выше. Я понимаю, что он не может понять этот критерий, но для меня должен быть какой-то способ указать его вручную.

Правильно ли, что django-rest-swagger будет показывать только то, что я хочу, если бы я переписал свои моделиризаторы как просто сериализаторы? Невозможно ли мне вручную описать django-rest-swagger, какой тип параметра параметра и тип данных должны быть, и если это необходимо?

Я знаю, что мне здесь что-то не хватает. Я использую классные представления и modelserializers, которые почти идентичны примерам в учебниках django-rest-framework. Вполне возможно, что я просто не понимаю понятия "типы параметров" в этом контексте. Мой API отлично работает, и я не хочу переписывать свои моделиризаторы для сериализаторов, чтобы я мог получить лучшую автоматическую документацию через swagger.

Ответ 1

ModelSerializers - это правильный способ пойти с DR-Swagger. Это может быть немного хитроумным преследованием именно там, где извлекаются разные поля Swagger. Мне часто приходилось возвращаться к отладке через процесс рендеринга страницы, чтобы выяснить, откуда это происходит.

В свою очередь:

Требуется? происходит из параметра Field.required(либо установленного в модели, либо поля Serializer). Описание происходит из параметра Field.help_text.

В сериализации DRF нового стиля, текст описания поступает из dosstring ViewSet. Если вам нужны документы, специфичные для метода, вам необходимо переопределить docstring для отдельных методов, например. retrieve:

def retrieve(self, request, *args, **kwargs):
    """Retrieve a FooBar"""
    return super().retrieve(request, *args, **kwargs)

Следует отметить, что DR-Swagger перенесена на использование новой логики схемы DRF в версии 2.0 (с DRF версии 3.5), которая по-прежнему имеет несколько грубых краев. Я рекомендую придерживаться DR-Swagger версии 0.3.x, которая (хотя и устарела) имеет больше возможностей и, по моему опыту, более надежную сериализацию.

Ответ 2

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

from django.contrib.auth import get_user_model
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    first_name = serializers.CharField(required=True)
    last_name = serializers.CharField(required=True)

    class Meta:
        model = get_user_model()

В приведенном выше примере я сериализую стандартную модель пользователя из Django и переопределяю атрибуты требуемые, поэтому теперь требуются first_name и last_name.

Конечно, бывают случаи, когда трудно или невозможно использовать ModelSerializer, тогда вы всегда можете отказаться от подкласса Serializer

Ответ 3

В коде, который у вас есть:

""
Этот текст является описанием для этого API
param1 - Первый параметр
param2 - Второй параметр
""

Try:

"" Этот текст является описанием для этого API
param1 - Первый параметр
param2 - Второй параметр
""

Я нашел, что некоторые плагины python и/или Django нуждаются в первой строке docstring, которая является первой с открытием трех двойных кавычек, которая также будет линией, которая запускает документацию. Вы даже можете не попробовать пробел между последней двойной кавычкой и T.