Django Rest Framework: как включить swagger docs для просмотра на основе функций

Я просмотрел Django REST Swagger 2.1.2.. Когда я попытался с учетом класса, он работал нормально.

Но я не нашел ссылки на то, как включить swagger для представлений, основанных на функциях, как показано ниже:

@api_view(['GET', 'POST'])
def app_info(request): 
    ...
    return response

Большинство моих views.py заполнены представлениями, основанными на функциях, как и выше.

Любая помощь в том, как включить то же самое, будет очень оценена. Спасибо!

Я использую Django: 1.8; Django REST Swagger: 2.1.2; DRF: 3.6.2

Ответы

Ответ 1

Вы можете использовать @renderer_classes decorator:

from rest_framework_swagger import renderers
from rest_framework.decorators import api_view, renderer_classes


@api_view(['GET', 'POST'])
@renderer_classes([renderers.OpenAPIRenderer, renderers.SwaggerUIRenderer])
def app_info(request): 
    ...
    return response

Кроме того, стоит упомянуть, что если вы не хотите использовать этот декоратор на каждом представлении, вы можете указать DEFAULT_RENDERER_CLASSES в настройках

EDIT: Кажется, это в документах. Проверьте самую нижнюю часть этой страницы: https://django-rest-swagger.readthedocs.io/en/latest/schema/

Ответ 2

Я не знаком с чванством, но вы можете попробовать использовать декоратор таким образом:

class TestView(View):
    @api_view(['GET', 'POST'])
    def get(self, request):
        ....

или

from django.utils.decorators import method_decorator
class TestView(View):
    @method_decorator(api_view(['GET', 'POST'])
    def get(self, request):
        ....

----------------------------------------------- -----------------------------

Извините, возможно, я неправильно понял ваш вопрос. в соответствии с документом, если вы хотите включить swagger в представлении на основе класса. есть пример:

from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.schemas import SchemaGenerator
from rest_framework.views import APIView
from rest_framework_swagger import renderers


class SwaggerSchemaView(APIView):
    permission_classes = [AllowAny]
    renderer_classes = [
        renderers.OpenAPIRenderer,
        renderers.SwaggerUIRenderer
    ]

    def get(self, request):
        generator = SchemaGenerator()
        schema = generator.get_schema(request=request)
        return Response(schema)

restframework будет использовать эти два класса renderer_classes для рендеринга Json и UI.