【问题标题】:How to make Django REST Framework return a list of hyperlinks instead of all data in one list?如何让 Django REST Framework 返回一个超链接列表而不是一个列表中的所有数据?
【发布时间】:2014-10-04 19:28:57
【问题描述】:

我正在使用流行的 Django REST 框架在 Python/Django 中创建一个 REST API。

我偶然发现了一些东西。

我在下面的代码片段中有一个 API 调用来显示所有模因。

这将返回有关数据库中所有 meme 的所有已知信息的列表...如何使 Django REST 框架返回超链接列表以及有关每个超链接后面的特定 meme 的所有信息?或者这不被认为是“RESTful”吗?抱歉,这些天互联网上有很多关于 REST 的 FUD,我仍在学习这些东西。 :-)

提前感谢您的任何提示!

K.

(django)kristof@kristof:~/dev/projects/sandbox$ curl -i -H "Authorization: Token 3fcb196896cf361a586f200cd05d1fb76dc595e9" -X GET http://api.sandbox.dev:8080/memes/
HTTP/1.0 200 OK
Date: Sat, 04 Oct 2014 19:23:18 GMT
Server: WSGIServer/0.1 Python/2.7.6
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Allow: GET, POST, HEAD, OPTIONS

[{"id": 2, "name": "Overly Attached Girlfriend"}, {"id": 1, "name": "Good Guy Greg"}]

【问题讨论】:

    标签: python django api rest


    【解决方案1】:

    为了让自己更清楚一点:我希望 /memes/ 的端点返回数据库中 meme 的 URL 列表,其中包含有关每个 URL 后面的每个 meme 的更多详细信息。

    我希望端点返回的结果是这样的:

    ["http://api.sandbox.dev:8080/memes/2/", "http://api.sandbox.dev:8080/memes/1/"]
    

    而不是已经包含每个模因的所有详细信息的列表。

    【讨论】:

      【解决方案2】:

      在您的序列化程序类中,在版本 3 中添加一个 to_representation 方法(我认为在版本 2 中是 to_native)。

      def to_representation(self, obj):
          # maniputale your object here to create the hyperlink
          hyperlink = "/link/details/%s" % obj.id
          return hyperlink
      

      此方法的返回值是您的响应列表中的一个元素。

      Custom output with serializer in Django Rest Framework

      【讨论】:

        【解决方案3】:

        您似乎收到了一个 Json。从 json 转换它,你就会有你的列表

        a = '[{"id": 2, "name": "Overly Attached Girlfriend"}, {"id": 1, "name": "Good Guy Greg"}]'
        import json
        type(json.loads(a))
        list
        

        在使用加载时,您应该注意一些事项,例如代码注入。谷歌它有一个概念

        【讨论】:

        • 感谢您的提示,这对于其他事情可能会派上用场。你的回答也让我意识到我可能还没有说清楚。 :-) 请参阅我的其他评论:我希望端点返回一个 URL 列表(每个 URL 后面都有更多详细信息),而不是将当前 JSON 列表转换为 Python 对象。很抱歉造成误解。
        • 尝试查看帖子。我想它会帮助你stackoverflow.com/questions/21898043/…
        猜你喜欢
        • 1970-01-01
        • 2019-05-14
        • 2016-01-16
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 2022-06-15
        相关资源
        最近更新 更多