with rest_framework pip3 instalar framework con django django-rest-framework swagger-2.0

rest_framework - django-rest-swagger: ¿Cómo puedo especificar el parámetro para las solicitudes POST mientras uso APIView?



rest framework django 2 (2)

Este es el marco de trabajo obtener el código de esquema (la parte del mismo):

def get_serializer_fields(self, path, method, view): """ Return a list of `coreapi.Field` instances corresponding to any request body input, as determined by the serializer class. """ if method not in (''PUT'', ''PATCH'', ''POST''): return [] if not hasattr(view, ''get_serializer''): return [] serializer = view.get_serializer() if isinstance(serializer, serializers.ListSerializer): return [ coreapi.Field( name=''data'', location=''body'', required=True, type=''array'' ) ] ...

Como puede ver, debería funcionar si define el método get_serializer en su vista, que devuelve el UserAuthenticationSerializer .

- EDITAR -

Olvídate: feliz codificación.

En la última versión de dajngo rest swagger (2.1.0), las cadenas de documentos YAML han quedado en desuso. No puedo mostrarme arrogante para mostrar los parámetros de solicitud POST.

Aquí está mi vista

class UserAuthenticationView(APIView): def post(self, request, *args, **kwargs): serializer = UserAuthenticationSerializer(data=self.request.data) if serializer.is_valid(): user = serializer.validated_data[''user''] return Response({''token'': user.auth_token.key}, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)

Aquí está mi serializador

class UserAuthenticationSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() def validate(self, attrs): username = attrs.get(''username'') password = attrs.get(''password'') if username and password: user = authenticate(username=username, password=password) if user: if not user.is_active: msg = ''User account is disabled.'' raise serializers.ValidationError(msg, code=''authorization'') else: msg = ''Unable to log in with provided credentials.'' raise serializers.ValidationError(msg, code=''authorization'') else: msg = ''Must include "username" and "password".'' raise serializers.ValidationError(msg, code=''authorization'') attrs[''user''] = user return attrs

Esto es lo que obtengo en mi generado

No obtengo un formulario con los campos para los datos POST. ¿Cómo lo consigo?


django-rest-swagger utiliza rest_framework.schemas.SchemaGenerator para generar el esquema y SchemaGenerator usa get_serializer_fields para obtener la información del serializador de una vista. get_serializer_fields comprueba si una vista tiene un método get_serializer para generar el formulario. GenericAPIView proporciona el get_serializer por lo que heredar de él es suficiente.

Heredar vista desde GenericAPIView lugar de APIView simple. Y agrega el atributo serializer_class con el serializador apropiado

from rest_framework.generics import GenericAPIView class UserAuthenticationView(GenericAPIView): serializer_class = UserAuthenticationSerializer def post(self, request, *args, **kwargs): serializer = UserAuthenticationSerializer(data=self.request.data) if serializer.is_valid(): user = serializer.validated_data[''user''] return Response({''token'': user.auth_token.key}, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)