Django Rest Framework:如何为基于函数的视图启用 swagger 文档
Django Rest Framework: How to enable swagger docs for function based views
我经历了Django REST Swagger 2.1.2 documentation。当我尝试使用基于 class 的视图时,它工作正常。
但我没有找到任何关于如何为基于函数的视图启用 swagger 的参考资料,如下所示:
@api_view(['GET', 'POST'])
def app_info(request):
...
return response
我的大部分 views.py
都是基于函数的视图,就像上面一样。
任何关于如何启用相同功能的帮助将不胜感激。谢谢!
我正在使用 Django:1.8; Django REST 摇摇欲坠:2.1.2; DRF:3.6.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):
....
-------------------------------------------- ------------------------------
对不起,我可能误解了你的问题。根据文档,如果你想在基于 class 的视图中启用 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.
您应该可以使用 @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
in settings
编辑:毕竟它似乎在文档中。检查此页面的最底部:https://django-rest-swagger.readthedocs.io/en/latest/schema/
在您的 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"}
我经历了Django REST Swagger 2.1.2 documentation。当我尝试使用基于 class 的视图时,它工作正常。
但我没有找到任何关于如何为基于函数的视图启用 swagger 的参考资料,如下所示:
@api_view(['GET', 'POST'])
def app_info(request):
...
return response
我的大部分 views.py
都是基于函数的视图,就像上面一样。
任何关于如何启用相同功能的帮助将不胜感激。谢谢!
我正在使用 Django:1.8; Django REST 摇摇欲坠:2.1.2; DRF:3.6.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):
....
-------------------------------------------- ------------------------------
对不起,我可能误解了你的问题。根据文档,如果你想在基于 class 的视图中启用 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.
您应该可以使用 @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
in settings
编辑:毕竟它似乎在文档中。检查此页面的最底部:https://django-rest-swagger.readthedocs.io/en/latest/schema/
在您的 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"}