Revisé la documentación de Django REST Swagger 2.1.2 . Cuando probé con vistas basadas en clases, funcionó bien.
Pero no encontré ninguna referencia sobre cómo habilitar swagger para vistas basadas en funciones como se muestra a continuación:
@api_view(['GET', 'POST']) def app_info(request): ... return response
La mayor parte de mi views.py
está lleno de vistas basadas en funciones, al igual que arriba.
Cualquier ayuda sobre cómo habilitar el mismo será muy apreciada. ¡Gracias!
Estoy usando Django: 1.8; Django RESTO Swagger: 2.1.2; FRD: 3.6.2
Deberías poder usar el decorador @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
Además, vale la pena mencionar que si no desea usar este decorador en cada vista, puede especificar DEFAULT_RENDERER_CLASSES
en la configuración
EDITAR: Parece que está en los documentos después de todo. Consulte la parte inferior de esta página: https://django-rest-swagger.readthedocs.io/en/latest/schema/
no estoy familiarizado con swagger, pero puede intentar usar el decorador de esta manera:
class TestView(View): @api_view(['GET', 'POST']) def get(self, request): ....
o
from django.utils.decorators import method_decorator class TestView(View): @method_decorator(api_view(['GET', 'POST']) def get(self, request): ....
Lo siento, tal vez he entendido mal tu pregunta. de acuerdo con el documento, si desea habilitar swagger en la vista basada en clases. hay ejemplo:
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 usará estos dos renderer_classes para representar Json y UI.
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
@api_view(['post']) @schema(CustomSampleSchema()) @csrf_exempt def func_name(request, param): """ Your function definition below """
{"name": "['name1', ]", "places": "['place1', 'place2']", "key":"12345"}