2016-01-27 11 views
8

Sto usando Django REST Framework con django-rest-swagger per creare un'interfaccia navigabile per la mia API. Posso specificare un serializzatore del corpo della richiesta usando YAML docstring, ma non ho trovato un modo per specificare un serializzatore per i parametri di richiesta della query. La vista che sto usando è abbastanza simile:Come specificare un serializzatore dei parametri di query in django-rest-swagger?

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

quello che sto cercando di realizzare è quello di rendere django-rest-swagger creare campi di modulo per parametri di ricerca dai ListBansSerializer in modo che io non avrei dovuto specificare manualmente la sezione parameters nel docstring. C'è un modo per farlo?

risposta

4

Ho creato un decoratore semplice che aggiunge automaticamente i parametri di query alla docstring. La fonte è disponibile al numero github. Ecco un esempio di utilizzo:

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)