2016-01-27 11 views
8

मैं अपने एपीआई के लिए ब्राउज़ करने योग्य इंटरफ़ेस बनाने के लिए django-rest-swagger के साथ Django REST Framework का उपयोग कर रहा हूं। मैं YAML docstring का उपयोग कर एक अनुरोध बॉडी सीरिएलाइज़र निर्दिष्ट कर सकता हूं, लेकिन मुझे अनुरोध क्वेरी पैरामीटर के लिए एक धारावाहिक निर्दिष्ट करने का कोई तरीका नहीं मिला है। दृश्य मैं उपयोग कर रहा हूँ बहुत की तरह है:django-rest-swagger में एक क्वेरी पैरामीटर serializer निर्दिष्ट करने के लिए कैसे?

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

कि मैं क्या हासिल करने की कोशिश कर रहा हूँ कि मैं में मैन्युअल parameters अनुभाग निर्दिष्ट करने की जरूरत नहीं होगी बनाने के लिए django-rest-swagger तो ListBansSerializer से क्वेरी पैरामीटर के लिए प्रपत्र फ़ील्ड्स बनाने है docstring। क्या ऐसा करने के लिए कोई रास्ता है?

उत्तर

4

मैंने एक साधारण सजावट बनाई है जो स्वचालित रूप से डॉकस्ट्रिंग में क्वेरी पैरामीटर जोड़ती है। स्रोत github पर उपलब्ध है। यहां एक उपयोग उदाहरण है:

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) 
संबंधित मुद्दे