接口:接口的概念、數據接口文檔、接口規範(restfull)、Postman接口測試工具 drf請求生命週期 - CBV drf的基礎組件:請求、響應、渲染、解析、異常 drf的序列化(核心):序列化、模型序列化、羣操做序列化 drf的視圖家族:視圖類(經常使用)、視圖工具類、工具視圖類(經常使用)、視圖集 drf的三大認證(核心):認證、權限、頻率 drf的過濾:篩選、搜索、排序分頁、區間、自定義
drf是Django的插件,因此要提早安裝Django前端
安裝指令:pip3 install djangorestframeworkvue
使用drf時,要在settings中註冊python
什麼是接口:規定了提交請求參數的請求方法、訪問其能夠獲取響應的反饋數據的url連接ios
四部分:url連接+請求方法+請求參數+響應數據結果npm
接口文檔:將接口的四部分翻譯成文檔形式——word 、md、Yapidjango
接口測試工具:Postmanaxios
接口測試規範:後端
連接:--https://api.baidu.com/v2/user/?ordering=-uid 請求方式:增post、刪delete、整改put、局改patch、查get 響應:網絡狀態碼、數據狀態碼、數據狀態信息、數據體(子資源)
十大接口:單羣查|單羣增|單羣總體改|單羣局部改|單羣刪api
CBV源碼:as_view()=>view()=>dispatch()=>視圖類的視圖方法get|post...數組
debug窗口使用
接口都是操做先後臺數據的,因此須要保證數據的安全性
採用https協議
接口用來操做數據,與網址(操做頁面)有區別,因此用特定的關鍵字表示接口
api關鍵字
--https://api.baidu.com --https://www.baidu.com/api
接口操做的數據稱之爲 資源,在url中只體現資源名稱(名稱),不體現操做的方式動詞
常規資源接口
--https://api.baidu.com/books/ --https://api.baidu.com/books/(pk)/
若是一個資源存在多版本結果,在url連接中要用特定符號來兼容多版本共存
v1 | v2
--https://api.baidu.com/v1/books/ --https://api.baidu.com/v2/books/
羣資源操做,通常還有額外的限制條件,若是排序、限制調試、分頁等等
? 限制條件
--https://api.baidu.com/v1/books/?ordering=-price&limit=3
五大請求方式
get:請求單個或多個資源 --https://api.baidu.com/books/ 羣查,返回多個結果對象 --https://api.baidu.com/books/(pk)/ 單查,返回單個結果對象 post:新增單個或多個資源 --https://api.baidu.com/books/ 單增,提交單個數據字典,完成單增,返回單個結果對象 羣增,提供多個數據字典的數組,完成羣增,返回多個結果對象 put:總體修改單個或多個資源 --https://api.baidu.com/books/ 總體修改多個,提供多個數據字典的數組(數字字典中要包含主鍵),完成羣改,返回多個結果對象 --https://api.baidu.com/books/(pk)/ 總體修改單個,提供單個數據字典(主鍵在url中提現),完成單改,返回單個結果對象 patch:局部修改單個或多個資源 方式與put徹底相同,不一樣的是:操做的資源若是有5個key-value鍵值對,put請求提供的字典必須全包含,可是patch提供的字典包含的鍵值對0~5個均可以 delete:刪除單個或多個資源 --https://api.baidu.com/books/ 多刪,提供多個資源主鍵數據,完成羣刪,不作任何資源返回(通常咱們會返回結果信息:成功|失敗) --https://api.baidu.com/books/(pk)/ 單刪,不須要提供額外數據,完成單刪,不作任何資源返回(通常咱們會返回結果信息:成功|失敗)
響應對象中要包含網絡狀態碼(網絡轉檯信息和網絡狀態碼捆綁出現,不要額外設置):
1xxx:基本信息 2xxx:成功 -200基本 201新增成功 3xxx:重定向 4xxx:客戶端錯誤 -404錯誤請求;403請求無權限;404:請求資源不存在 5xxx:服務器錯誤 -500服務器錯誤
數據狀態碼(通常都是先後端規定):
0:成功 1:失敗 -1xxx:具體失敗信息(要在接口文檔中明確寫出) 2:無數據 -2xxx:具體無數據信息(要在接口中文檔中明確寫出)
數據狀態信息(通常不單單是對象數據狀態碼的解釋,更多的對結果的描述,給前臺開發者閱讀的)
數據結果(常量、數組、字典),若是有子資源(圖片、音頻、視頻),返回資源的url連接
{ "status": 0, "msg": 'ok', "results": [{ "name": "西遊記", "img": "https://api.baidu.com/media/book/xyj.png" }] }
1)as_view()是入口,獲得view函數地址(路由層) 2)請求來了調用view函數,內部調用dispatch函數完成請求分發(請求以前) 3)dispatch函數將請求方式映射成視圖類的同名方法,完成請求的處理,獲得相應 (請求執行完畢) 4)再將相應的結果一層層返回 (返回結果)
1)as_view()是入口,獲得view函數地址,在範圍view函數地址時局部禁用csrf認證 2)請求來了調用view函數,內部調用(APIView類的)dispatch函數完成請求分發 3)dispatch函數 二次封裝request、完成三大認證後,再將請求方式映射成視圖類的同名方法,完成請求的處理,獲得相應,再對相應作渲染處理 4)再將相應的結果一層層返回 apiView 的處理: as_view: 就幹了一件事,禁用csrf認證 dispatch: 1)二次封裝request 2)三大認證
前端發送請求數據——》headers(字典)
後端獲取headers數據:request.META.get('HTTP_參數全大寫')
後端settings配置CORS_ALLOW_HEADERS = [ ]
CORS_ALLOW_HEADERS = [ //容許請求頭 "accept", "accept-encoding", "authorization", "content-type", "dnt", "origin", "user-agent", "x-csrftoken", "x-requested-with", "token", //自定義的參數 "owen", //自定義的參數 ]
META:後端獲取前端發送的數據(除了文本數據外的全部數據)
能夠在先後端分離的開發中提升開發Rest API接口的效率。
建立Django項目d-proj,而後建立vue項目v-proj,
在INSTALLED_APPS = [ 'corsheaders', 'app', 'api', ] 中註冊
註釋csrf中間件,導入模塊,添加中間件
from django.middleware.common import CommonMiddleware MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware' ] CORS_ORIGIN_ALLOW_ALL = True
打開v-proj項目,添加npm的server服務,項目名v-proj,Scripts是serve
在App.vue文件中刪除多餘的代碼,留下面的五句話
<template> <div id="app"> <router-view/> </div> </template>
去home.vue文件中刪除home代碼下面的兩行代碼,添加一個h1行標籤
<h1>主頁</h1>
script內保留下面的代碼
<script> export default { name: 'home', components: { }, } </script>
運行項目,點擊連接能夠在頁面上顯示主頁了
打開d_proj項目,在url中導入模塊,添加url路由
from app import views url(r'^test/', views.test),
在views中導入模塊,定義函數
from django.http import JsonResponse def test(request): return JsonResponse('ok',safe=False)
在home.vue中的script中添加created結果爲
<script> export default { name: 'home', components: { }, created(){ } } </script>
在根目錄下安裝axios,命令以下:
cnpm install axios
在main.js中導入模塊
import axios from 'axios' Vue.prototype.$axios = axios;
而後去home.vue文件中添加axios數據
created(){ this.$axios({ url:'http://127.0.0.1:8000/test', method:'get', params:{ a:1 }, data:{ x:10 } }).then(response => { console.log('成功:',response.data) }).catch(error => { console.log('失敗:', error.response.data) }) }
而後去Django中viiews打印數據
def test(request): print(request.method) print(request.GET) print(request.body) return JsonResponse('ok', safe=False)
在home中添加headers
在django根目錄中安裝
pip3 install djangorestframework
在settings中配置
import rest_framework
在Django根目錄下執行
python3 manage.py startapp api
把d_proj裏面的urls文件複製粘貼到api文件中/