首页 文章

Django Rest Swagger与APIView

提问于
浏览
3

我正在尝试将Swagger集成到我的Django Rest Framework API中 . 我安装了相关的软件包,并按照Github页面的快速入门指南进行操作 . 我有一些问题 . Swagger仅显示视图的doc-comment .

基本上我有一个APIView解释给定的URL(因为它可以有n量的“令牌”,例如“/ first / second /”或“/ a / b / c / d / e / f / g”)使aa db-query并选择正确的序列化程序以根据请求类型和URL末尾的资源返回数据 .

如果我已正确理解Swagger的工作原理,它会使用序列化器来获取示例json输入和其他相关数据以显示在ui中 . 有没有办法明确告诉它应该使用的序列化器?

最后,这是我的APIView的GET代码示例,用于显示序列化程序的用法 . 如您所见,使用了两种不同的序列化器:

isValid = self.isValidUrl(request.path)
    if not isValid:
        return Response("Error: The url is empty.")

    url = self.trimTheUrl(request.path)
    print url

    try:
        target = models.APINode.objects.get(uniquePath=url)
        perm = IsOwner()
        perm.has_object_permission(request, self, target)
        #check is the APINode collection or item:
        if target.objectType == "item":
            #return JSON data of the materialItem:
            serializer = ProductSerializer(target.materialItem)
            return Response(serializer.data)
        else:
            #find objects in this collection
            children = models.APINode.objects.filter(parentPath=target.uniquePath)
            serializer = APINodeSerializer(children, many=True)
            return Response(serializer.data)

    except models.APINode.DoesNotExist:
        return Response("404: No such collection or materialItem.")

无论它值多少,API都代表了一个集合和资源结构,就像一个具有n深路径的文件系统 .

1 回答

  • 0

    我找到了一种使用名为serializer的标签来实现此目的的方法 . 一个例子是 serializer: UserDocSerializer . 你是这样的:

    """
    Your View
    ---
    ... All about parameters and types ...
    serializer: UserDocSerializer
    ...
    

    我得到的问题是它总是试图让我从视图中导入序列化器,所以我必须在views.py中声明这个:

    class UserDocSerializer(serializers.ModelSerializer):
        class Meta:
            model = UserProfile
            fields = ('username', 'image')
    

    有了它,您只需获取要显示的字段

相关问题