Django REST framework API 指南(23):返回 URL

官方原文连接
本系列文章 github 地址
转载请注明出处python

返回 URL

一般,从 Web API(例如 http://example.com/foobar)返回绝对 URI 多是更好的作法,而不是返回相对 URI,例如 /foobargit

这样作的好处有:github

  • 它更明确。
  • 它为你的 API 客户端留下更少的工做。
  • 当字符串在诸如 JSON 这样的表示中没有本地 URI 类型时,它的含义是没有歧义的。
  • 它使得使用超连接标记 HTML 表示等事情变得很容易。

REST framework 提供了两个实用函数,能够更简单地从 Web API 返回绝对 URI。django

使用它们不是必须的,可是若是你这样作,自描述 API 将可以自动为你输出超连接,这使得浏览 API 变得更容易。api

reverse

签名: reverse(viewname, *args, **kwargs)ide

具备与 django.urls.reverse 相同的行为,除了它返回一个彻底限定的 URL,使用 request 来肯定主机和端口。函数

你应该将 request 做为关键字参数包含在该函数中,例如:post

from rest_framework.reverse import reverse
from rest_framework.views import APIView
from django.utils.timezone import now

class APIRootView(APIView):
    def get(self, request):
        year = now().year
        data = {
            ...
            'year-summary-url': reverse('year-summary', args=[year], request=request)
        }
        return Response(data)
复制代码

reverse_lazy

签名: reverse_lazy(viewname, *args, **kwargs)ui

具备与 django.urls.reverse_lazy 相同的行为,除了它返回一个彻底限定的 URL,使用 request 来肯定主机和端口。url

reverse 函数同样,你应该将 request 做为关键字参数包含在函数中,例如:

api_root = reverse_lazy('api-root', request=request)
复制代码
相关文章
相关标签/搜索