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

wcode發表於2018-03-22

官方原文連結
本系列文章 github 地址
轉載請註明出處

返回 URL

通常,從 Web API(例如 http://example.com/foobar)返回絕對 URI 可能是更好的做法,而不是返回相對 URI,例如 /foobar

這樣做的好處有:

  • 它更明確。
  • 它為你的 API 客戶端留下更少的工作。
  • 當字串在諸如 JSON 這樣的表示中沒有本地 URI 型別時,它的含義是沒有歧義的。
  • 它使得使用超連結標記 HTML 表示等事情變得很容易。

REST framework 提供了兩個實用函式,可以更簡單地從 Web API 返回絕對 URI。

使用它們不是必須的,但是如果你這樣做,自描述 API 將能夠自動為你輸出超連結,這使得瀏覽 API 變得更容易。

reverse

簽名: reverse(viewname, *args, **kwargs)

具有與 django.urls.reverse 相同的行為,除了它返回一個完全限定的 URL,使用 request 來確定主機和埠。

你應該將 request 作為關鍵字引數包含在該函式中,例如:

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)

具有與 django.urls.reverse_lazy 相同的行為,除了它返回一個完全限定的 URL,使用 request 來確定主機和埠。

reverse 函式一樣,你應該將 request 作為關鍵字引數包含在函式中,例如:

api_root = reverse_lazy('api-root', request=request)
複製程式碼

相關文章