簡體   English   中英

Django Rest Framework:如何為基於函數的視圖啟用 swagger 文檔

[英]Django Rest Framework: How to enable swagger docs for function based views

我瀏覽了Django REST Swagger 2.1.2 文檔 當我嘗試使用基於類的視圖時,它運行良好。

但是我沒有找到任何關於如何為基於函數的視圖啟用 swagger 的參考,如下所示:

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

我的大部分views.py都充滿了基於函數的視圖,就像上面一樣。

任何有關如何啟用相同功能的幫助將不勝感激。 謝謝!

我正在使用Django:1.8; Django REST 搖搖欲墜:2.1.2; 災難恢復框架:3.6.2

您應該能夠使用@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/

我不熟悉招搖,但你可以嘗試以這種方式使用裝飾器:

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。

在您的 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"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM