2016-12-12 1 views
3

dajngo rest swagger (2.1.0)의 최신 버전에서는 YAML 문서화가 사용되지 않습니다. 나는 POST 요청 매개 변수를 보여주기 위해 swagger를 얻을 수 없다. 여기 django-rest-swagger : APIView를 사용하는 동안 POST 요청에 대한 매개 변수를 지정하는 방법

은 여기 내 시리얼이 내가 얻을 것입니다

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 

내보기

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) 

내 나는에 대한 필드와 양식을하지 않습니다 enter image description here

생성 포스트 데이터. 어떻게해야합니까?

답변

2

이 나머지 프레임 워크는 스키마 코드 (그것의 일부) 얻을 수 있습니다 : 당신이 볼 수 있듯이

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' 
      ) 
     ] 
... 

을 - UserAuthenticationSerializer 반환 - 당신이보기에 get_serializer 방법을 정의하는 경우가 작동합니다.

- EDIT -

잊어 버려요. 해피 코딩.

7

장고 - 휴식 - 자신감는 스키마와이 뷰의 시리얼 정보를 얻을 수 get_serializer_fields를 사용 SchemaGenerator를 생성하는 rest_framework.schemas.SchemaGenerator를 사용합니다. get_serializer_fields는보기에 get_serializer 메소드가 양식을 생성하는지 확인합니다. GenericAPIViewget_serializer을 제공하므로 충분히 상속받을 수 있습니다.

APIView이 아닌 GenericAPIView에서보기를 상속합니다. 적절한 시리얼 라이저를 사용하여 serializer_class 속성을 추가하십시오.

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) 
+0

기능 기반보기의 경우 가능한 방법은 무엇입니까? –