2016-01-27 23 views
8

我使用Django REST框架与django-rest-swagger为我的API创建可浏览的界面。我可以使用YAML docstring指定一个请求正文序列化程序,但是我还没有找到一种方法来为请求查询参数指定一个序列化程序。 我使用的观点是很喜欢:如何在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') 

什么,我想做到的,是使django-rest-swaggerListBansSerializer所以创建查询参数的表单字段,我就不必在手动指定parameters节文档字符串。有没有办法做到这一点?

回答

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)