【问题标题】:Django Rest Swagger with APIView带有 APIView 的 Django Rest Swagger
【发布时间】:2014-07-23 08:16:37
【问题描述】:

我正在尝试将 Swagger 集成到我的 Django Rest Framework API。我安装了相关软件包并按照 Github 页面上的快速入门指南进行操作。不过我遇到了一些问题。 Swagger 只显示视图的文档注释。

基本上我有一个 APIView 可以解释给定的 url(因为它可以有 n 个“令牌”,例如“/first/second/”或“/a/b/c/d/e/f/g” ) 进行 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 深路径的文件系统。

【问题讨论】:

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


    【解决方案1】:

    我找到了一种方法来使用称为序列化程序的标记。一个例子是serializer: UserDocSerializer。如果你是这样的:

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

    我遇到的问题是它总是试图让我从视图中导入序列化程序,所以我不得不在 views.py 中声明它:

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

    这样你就可以得到你想要显示的字段

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2021-01-16
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多