17

我浏览了Django REST Swagger 2.1.2 文档。当我尝试使用基于类的视图时,它工作正常。

但我没有找到任何关于如何为基于函数的视图启用招摇的参考,如下所示:

@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

4

3 回答 3

16

您应该能够使用@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/

于 2017-05-02T13:55:09.947 回答
3

我不熟悉招摇,但你可以尝试以这种方式使用装饰器:

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):
        ....

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

对不起,也许我误解了你的问题。根据文档,如果您想在基于类的视图中启用招摇。有例子:

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。

于 2017-05-02T05:47:01.233 回答
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 doc 的功能。

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

示例 json 输入

{"name": "['name1', ]",
"places": "['place1', 'place2']",
"key":"12345"}
于 2020-03-25T19:09:10.813 回答