Django Rest Framework:如何为基于函数的视图启用Swagger文档

18

我查看了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

3个回答

17

你应该能够使用 @renderer_classes 装饰器:

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
编辑:看来文档中确实有这个内容。请查看此页面底部:https://django-rest-swagger.readthedocs.io/en/latest/schema/

根据您的编辑:我怎么会错过那个..!感谢您的回答。 - Abijith Mg

2
我不熟悉Swagger,但你可以尝试以这种方式使用装饰器:
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。


谢谢。我会尝试一下。很可能不会成功,让我们看看。 - Abijith Mg
2
根据您的编辑说明:这个我已经知道了。我的问题是如何为函数视图启用Swagger。 - Abijith Mg
Abijith Mg正在询问有关带有函数的swagger,而不是带有类的swagger。关于类,Abijith Mg说:“它一直运行得很好”。 - undefined

2

在你的views.py中添加以下内容

导入

from rest_framework.schemas import AutoSchema
from rest_framework.compat import coreapi

#creating custom class 
class CustomSampleSchema(AutoSchema):
    def __init__(self):
        super(CustomSampleSchema, self).__init__()

    def get_manual_fields(self, path, method):
        extra_fields = [
            coreapi.Field('field1', required=True, location='form', description='', type='', example=''),
            coreapi.Field('field2', required=False, location='form', description='', type='', example=''),
            coreapi.Field('field3', required=False, location='form', description='', type='', example='')

        ]
        manual_fields = super().get_manual_fields(path, method)
        return manual_fields + extra_fields

这是你正在为其编写Swagger文档的函数。

@api_view(['post'])
@schema(CustomSampleSchema())
@csrf_exempt
def func_name(request, param):
"""
Your function definition below
"""

示例JSON输入

{"name": "['name1', ]",
"places": "['place1', 'place2']",
"key":"12345"}

1
有没有办法添加描述和响应类型? - Anuj Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接