簡述DRF(Django restframework)就是一個Django中使用 rest 接口規(guī)范的模塊。什么rest接口規(guī)范?就是對于我們書寫前后端分離時,定義接口的一種規(guī)范,列舉如下規(guī)范:
請求方式 | url 設(shè)計(接口) | 請求內(nèi)容 | 響應(yīng)內(nèi)容 |
---|---|---|---|
GET | 127.0.0.1:8000/books/ | 獲取所有書本的信息 | [ {書的id,name,…} , {}, {} …] |
GET | 127.0.0.1:8000/books/{ id } | 獲取單條數(shù)據(jù)據(jù) | 單條數(shù)據(jù){ 書的 id,name…. } |
POST | 127.0.0.1:8000/books/ | 增加單條數(shù)據(jù) | 添加成功的數(shù)據(jù){ ‘mesage’:‘ok’} |
DELETE | 127.0.0.1:8000/books/{ id } | 刪除單條數(shù)據(jù) | 返回空“ ” |
PUT | 127.0.0.1:8000/books/{ id } | 修改數(shù)據(jù) | 更新后完整的數(shù)據(jù){ } |
從結(jié)構(gòu)上看,比我們一般設(shè)計的 url 地址更加簡潔明了,方便程序員維護(hù)還有錯誤處理
錯誤處理:{ “error” : “message” }
如何在 Django 中實現(xiàn) rest接口規(guī)范?
安裝 DRF
pip install djangopip install djangorestframework
完成之后可以進(jìn)行學(xué)習(xí)了以下內(nèi)容:
Django 中View視圖函數(shù)使用有些不是很方便,所以封裝了APIView
class LoginView(View): def get(self, request): return render(request, 'login.html') def post(self, request): print(request.POST) # 此時Ajax發(fā)送的請求無法被識別 return HttpResponse("ok")
APIView的使用
class LoginView(APIview): def get(self, request): return render(request, 'login.html') def post(self, request): print(request.data) # APIView中的解析器就幫我們做到了解析的功能 return HttpResponse("ok")
View源碼分析CBV(django classbasedview)
from django.views import View
在視圖類種繼承 View 類 class StudentView(View):pass
urls.py 中定義路由關(guān)系
urlpatterns = [
? re_path(“l(fā)ogin/”, views.LoginView.as_view()),
]
Django啟動時加載路由系統(tǒng),會讀取urlpatterns中的對應(yīng)關(guān)系
執(zhí)行as_view(),或得器返回值,該函數(shù)返回一個view視圖函數(shù)
此時綁定關(guān)系建立好了,當(dāng)用戶請求過來時,就會執(zhí)行url對應(yīng)得view視圖函數(shù)
該視圖函數(shù)得返回值是self.dispatch()
self.dispatch()會找到http_method_names變量里面得函數(shù),并執(zhí)行,并最終返回
APIView源碼分析
封裝自己的東西,用到view得方法
安裝djangorestframework
pip install djangorestframework
在views.py中
from rest_framework.view import APIView
在視圖類繼承APIView
class StudentView(APIView): def get(self, request): pass def post(self, request): pass
urls.py 中保持不變
Django啟動時加載路由系統(tǒng),會讀取 urlpatterns 中的對應(yīng)關(guān)系
from django.urls import pathfrom api.view import viewsurlpatterns = [ path("login/", views.LoginView.as_view()),]
此時綁定關(guān)系已經(jīng)建立好了,當(dāng)用戶請求過來時,就會執(zhí)行 url 對應(yīng)的 View 視圖函數(shù)
請求到來,執(zhí)行View視圖函數(shù)
最后執(zhí)行 dispatch(),獲取返回值,返回給用戶
Django RestFramework 自定制的內(nèi)容就在重寫的 as_view 函數(shù)里面以及 dispatch() 方法