django rest framework 官網(wǎng)
在學(xué)習(xí)django rest framework(下面簡稱drf)之前需要知道
對RESTful API設(shè)計(jì)有一定了解 對django框架有一定認(rèn)識,本身drf就是基于django做的 對python面向?qū)ο缶幊逃辛私猓╠rf會(huì)對一些原生的django類做封裝)一、前言
在學(xué)習(xí)drf之前的時(shí)候,先簡單說一下需要的預(yù)備知識。在django中,路由匹配之后,會(huì)進(jìn)行路由分發(fā),這個(gè)時(shí)候會(huì)有兩種選擇模式的選擇。也就是FBV與CBV。
1、FBV
fbv就是在url中一個(gè)路徑對應(yīng)一個(gè)函數(shù)
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index)]
在視圖函數(shù)中
def index(request): return render(request, 'index.html')
2、CBV
cbv就是在url中一個(gè)路徑對應(yīng)一個(gè)類,drf主要使用CBV
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.IndexView.as_view()) # 執(zhí)行類后面的as_view()方法,是父類里面的方法]
在視圖函數(shù)中
from django.views import Viewclass IndexView(View): # 以get形式訪問會(huì)執(zhí)行g(shù)et函數(shù),一般情況下獲取數(shù)據(jù) def get(self, *args, **kwargs): return HttpResponse('666') # 以post形式訪問的話會(huì)執(zhí)行post函數(shù),一般情況下發(fā)送數(shù)據(jù) def post(self, *args, **kwargs): return HttpResponse('999')我們在路由匹配的時(shí)候看到url(r'^index/', views.IndexView.as_view()),那這個(gè)as_view()是什么,既然我們在視圖類中沒有定義這個(gè)as_view()方法,就應(yīng)該到父類(也就是IndexView的父類View)中看一下View。以下是django源碼,路徑是/django/views/generic/base.py,
class View: http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] # 支持的各種http方法 def __init__(self, **kwargs): pass @classonlymethod def as_view(cls, **initkwargs): # url路由匹配進(jìn)入as_view方法 def view(request, *args, **kwargs): return self.dispatch(request, *args, **kwargs) # 返回dispath方法 return view def dispatch(self, request, *args, **kwargs): # dispath方法是drf的關(guān)鍵,dispath方法會(huì)通過反射,通過請求的方法,分發(fā)到各個(gè)視圖類的方法中 pass
3、django的請求周期
因此根據(jù)CBV和FBVdjango的生命周期可以又兩類
FBV:請求通過uwsgi網(wǎng)關(guān),中間件,然后進(jìn)入路由匹配,進(jìn)入視圖函數(shù),連接數(shù)據(jù)庫ORM操作,模板渲染,返回經(jīng)過中間件,最終交給瀏覽器response字符串。
CBV:請求通過uwsgi網(wǎng)關(guān),中間件,然后進(jìn)入路由匹配,這里就與FBV有區(qū)別了,因?yàn)椴辉偈窃噲D函數(shù)而是視圖類,說的詳細(xì)一點(diǎn),先經(jīng)過父類View的dispath方法,進(jìn)行請求方法的判斷,在分發(fā)到視圖類的方法,連接數(shù)據(jù)庫ORM操作,模板渲染,返回經(jīng)過中間件,最終交給瀏覽器response字符串。
新聞熱點(diǎn)
疑難解答
圖片精選