2016-01-27 12 views
8

API'm için göz atılabilir arayüz oluşturmak üzere Django REST Framework'ü django-rest-swagger ile kullanıyorum. YAML docstring kullanarak bir istek gövdesi serializer belirtebilir, ancak istek sorgu parametreleri için bir serializer belirtmek için bir yol bulamadım. Ben kullanıyorum görünümü oldukça gibidir:Django-rest-swagger'da bir sorgu parametresi serileştiricisi nasıl belirlenir?

class ListBans(BaseBanView): 

    def get(self, request): 
     """ 
     List all profile bans 
     --- 
     response_serializer: backend_serializers.BanSerializer 
     request_serializer: moderator_serializers.ListBansSerializer 
     """ 
     serializer = moderator_serializers.ListBansSerializer(data=request.query_params) 
     if serializer.is_valid(raise_exception=True): 
      # query profile bans 
      data = [] 
      return APIResponse(status=status.HTTP_200_OK, data=data) 

class ListBansSerializer(serializers.Serializer): 
    limit = serializers.IntegerField(default=10, help_text='query limit') 
    offset = serializers.IntegerField(default=0, help_text='query offset') 

ne elde etmek çalışıyorum ben elle parameters bölüm belirtmek olmazdı django-rest-swagger böylece ListBansSerializer sorgu parametreleri için form alanları oluşturmak yapmaktır docstring'ini. Bunu yapmanın bir yolu var mı?

cevap

4

Otomatik olarak sorgu parametrelerini docstring'e ekleyen basit bir dekoratör oluşturdum. Kaynak github'da kullanılabilir. İşte bir kullanım örneği:

class ListBansSerializer(serializers.Serializer): 
    limit = serializers.IntegerField(default=10, help_text='query limit') 
    offset = serializers.IntegerField(default=0, help_text='query offset') 


class ListBans(BaseBanView): 
    @add_query_parameters(ListBansSerializer) 
    def get(self, request): 
     """ 
     List all profile bans 
     --- 
     response_serializer: backend_serializers.BanSerializer 
     """ 
     serializer = moderator_serializers.ListBansSerializer(data=request.query_params) 
     if serializer.is_valid(raise_exception=True): 
      # query profile bans 
      data = [] 
      return APIResponse(status=status.HTTP_200_OK, data=data)