返回 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)
複製程式碼