目錄響應渲染模組
請求資料解析模組
響應模組
根據客戶端傳回的需求,進行路由匹配,呼叫相應的介面,然後介面執行完成的的資料,按照需要的格式進行返回。
一般採用安全協議,因為介面都是對資料進行操作
在url中要體現介面的關鍵字api
,如:
或
介面操作的資料稱之為資源,前台請求資料的時候要採用資源的複數形式
/books/
或/books
介面的鏈結中不能出現操作資源的方式,一般通過請求方式來決定操作資源的方式
五大介面:
當資源資料有多個版本時,介面要做到版本控制
/books/v1/
資源響應的限制條件:篩選、排序……
/books/?publish=1&ordering=-price&limit=3
資料相應的狀態碼,類似於網路狀態碼,約定俗成為0,1,2
-- success(0, "查詢成功")
-- nodata(1, "非正確,無資料,顯示基本資訊")
-- feailed(2, "查詢失敗")
響應的結果需要有資訊描述
響應的結果
注意:需要通過介面文件告訴前台傳遞的必要和選填引數,以及返回的資料內容結構
# 主路由urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls')),
]# 子路由 api/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
# as_view() 本質拿到 view函式位址,
# view內部通過dispatch分發請求給具體的(get|post|delete)方法處理請求
# 處理完後的響應結果會一層層返回
url(r'^books/$', views.bookview.as_view()),
url(r'^books/(?p.*)/$', views.bookview.as_view()),
]# 模型層 api/models.py
from django.db import models
class book(models.model):
name = models.charfield(max_length=64)
price = models.decimalfield(max_digits=5, decimal_places=2)
class meta:
db_table = 'old_boy_book'
verbose_name = '書籍'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 模型層建立完成之後,完成資料庫的遷移
# python manage.py makemigrations
# python manage.py migrate
# 檢視層 api/views
if pk: # 通過是否有主鍵決定獲取單個或是全部資源
book_dic_list = models.book.objects.filter(pk=pk).values('name', 'price')
if not book_dic_list:
return jsonresponse(
})return jsonresponse()
book_dic_list = models.book.objects.all().values('name', 'price')
if not book_dic_list:
return jsonresponse(
})return jsonresponse()
就是返回資料的形式:json和瀏覽器介面頁面
分析:
# 入口: apiview類的dispatch函式
self.response = self.finalize_response(request, response, *args, **kwargs)
--> neg = self.perform_content_negotiation(request, force=true)
--> renderers = self.get_renderers()
--> self.renderer_classes
--> apisetting:default_renderer_classes
區域性配置from rest_framework.views import apiview
from rest_framework.response import response
from rest_framework.renderers import jsonrenderer
from rest_framework.renderers import browsableapirenderer
class userapiview(apiview):
# 區域性配置:只有該檢視類起作用
renderer_classes = [jsonrenderer] # 只提供json資料渲染
pass
全域性配置# drf配置
rest_framework =
前端請求的資料進行解析的方式:json、form-data、urlencoding
分析:
# 入口:apiview類的dispatch函式
request = self.initialize_request(request, *args, **kwargs)
--> parsers=self.get_parsers()
--> self.parser_classes
--> apisetting:default_parser_classes
區域性配置from rest_framework.views import apiview
from rest_framework.response import response
from rest_framework.parsers import jsonparser
from rest_framework.parsers import formparser
from rest_framework.parsers import multipartparser
class userapiview(apiview):
# 區域性配置:只有該檢視類起作用
parser_classes = [jsonparser] # 只提供json解析
pass
全域性配置# drf配置
rest_framework =
請求的資料解析的位置
如果是資料報,則都解析到request.data中
如果是url中/?引數
則解析到request.query_params中
# 響應可以設定響應資料、響應網路狀態碼、響應頭、響應資料型別等
DRF 框架其他功能
drf框架 其他功能 1 認證 許可權 2 限流 控制使用者訪問api介面的頻率。針對和認證使用者分別進行限流。限流 針對和認證使用者分別進行限流控制 default throttle classes rest framework.throttling.anonratethrottle 針對 res...
drf框架介面文件
rest framework可以自動幫助我們生成介面文件。介面文件以網頁的方式呈現。自動介面文件能生成的是繼承自apiview及其子類的檢視。pip install coreapi 在總路由中新增介面文件路徑。文件路由對應的檢視配置為rest framework.documentation.incl...
DRF框架和Vue框架閱讀目錄
vue框架目錄 二 vue框架 二 vue指令 v once指令 v cloak指令 條件指令 v pre指令 迴圈指令 todolist案例 vue例項 計算 監聽 元件 元件資料互動 三 vue框架 三 vue專案搭建和專案目錄介紹 元件 路由 四 vue框架 四 路由跳轉 路由傳參 cooki...