導讀
我們知道http 服務是在接收到 http 報文時,有 server 端程序解析 http 報文,通過 http 報文的 uri 來決定該由哪個視圖處理。
那么在django 的基礎上,對于要弄清楚REST framework 的流程來講,弄清楚 framework 的入口函數(shù),至關重要
url route注冊
在講REST framework 的 route之前,我們先復習一下 django 是如何注冊 url 的。
django工程在 settings.py 中定義了 ROOT_URLCONF 變量,該變量能指導框架通過哪個 URL配置來對訪問的uri進行匹配,從而找到能夠匹配 uri 的視圖進行處理。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
從 django 的 url 處理樣例中,就能看出,關鍵點是 urlpatterns。
Routers
我們先看一個例子:
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = router.urls
上面代碼是 RESST framework 中 url 的樣例寫法,我們從中能夠看到,REST framework 增加了 routers 的模塊,并且定義了不同的 Router,本例中,使用的是 SimpleRouter.
而在 SimpleRouter 的對象注冊 url 后,會將 router.urls 賦值給 urlpatterns。
而 urlpatterns 是 django 中處理的,這是 django 與 REST framework 的第一個交匯點。
我們已經(jīng)知道,django框架在處理請求時,通過 uri 識別后,能找到views 下的一個處理函數(shù)。
而REST framework 注冊時,是注冊的 ViewSet 類,那么必然,中間有一個由 ViewSet 類轉換成 view 函數(shù)的過程,這個過程,我們來參考一下 router 解析