2016-01-27 12 views
8

Ich benutze Django REST Framework mit Django-Rest-Swagger um durchsuchbare Schnittstelle für meine API zu erstellen. Ich kann einen Request Body Serializer mit YAML docstring angeben, aber ich habe keine Möglichkeit gefunden, einen Serializer für Anfrageparameter anzugeben. Die Aussicht ich verwende ist ziemlich ähnlich wie:Wie spezifiziert man einen Abfrageparameter-Serializer 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') 

, was ich versuche zu erreichen ist zu django-rest-swagger Formularfelder für Abfrageparameter aus ListBansSerializer schaffen machen, damit ich den parameters Abschnitt nicht manuell in die angeben müssen Docstring. Gibt es eine Möglichkeit, das zu tun?

Antwort

4

Ich habe einen einfachen Dekorator erstellt, der automatisch Abfrageparameter an den Docstring anhängt. Die Quelle ist verfügbar unter github. Hier ist ein Anwendungsbeispiel:

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) 
Verwandte Themen