導(dǎo)讀
我們知道http 服務(wù)是在接收到 http 報(bào)文時(shí)信认,有 server 端程序解析 http 報(bào)文奴迅,通過 http 報(bào)文的 uri 來(lái)決定該由哪個(gè)視圖處理青责。
那么在django 的基礎(chǔ)上,對(duì)于要弄清楚REST framework 的流程來(lái)講取具,弄清楚 framework 的入口函數(shù)脖隶,至關(guān)重要
url route注冊(cè)
在講REST framework 的 route之前,我們先復(fù)習(xí)一下 django 是如何注冊(cè) url 的暇检。
django工程在 settings.py 中定義了 ROOT_URLCONF 變量产阱,該變量能指導(dǎo)框架通過哪個(gè) URL配置來(lái)對(duì)訪問的uri進(jìn)行匹配,從而找到能夠匹配 uri 的視圖進(jìn)行處理块仆。
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 處理樣例中构蹬,就能看出,關(guān)鍵點(diǎn)是 urlpatterns悔据。
Routers
我們先看一個(gè)例子:
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 的對(duì)象注冊(cè) url 后头滔,會(huì)將 router.urls 賦值給 urlpatterns怖亭。
而 urlpatterns 是 django 中處理的,這是 django 與 REST framework 的第一個(gè)交匯點(diǎn)坤检。
我們已經(jīng)知道依许,django框架在處理請(qǐng)求時(shí),通過 uri 識(shí)別后缀蹄,能找到views 下的一個(gè)處理函數(shù)峭跳。
而REST framework 注冊(cè)時(shí),是注冊(cè)的 ViewSet 類缺前,那么必然蛀醉,中間有一個(gè)由 ViewSet 類轉(zhuǎn)換成 view 函數(shù)的過程,這個(gè)過程衅码,我們來(lái)參考一下 router 解析