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)
複製代碼
相關文章
相關標籤/搜索