Django Rest Swagger与APIView

时间:2014-07-23 08:16:37

标签: django rest serialization django-rest-framework swagger

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

基本上我有一个APIView解释给定的url(因为它可以有n-amount的#34;令牌"例如。" / first / second /"或" / a / b / c / d / e / f / g")进行数据库查询并选择正确的序列化程序,以根据请求类型和网址末尾的资源返回数据。

如果我正确理解了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 :(得分: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')

通过这个,您只需获得要显示的字段