day 72 drf:Django-restframework

drf :Django-restframework

接口:接口的概念、數據接口文檔、接口規範(restfull)、Postman接口測試工具
drf請求生命週期  - CBV
drf的基礎組件:請求、響應、渲染、解析、異常
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窗口使用

restful接口規範

url連接:

  1. 接口都是操做先後臺數據的,因此須要保證數據的安全性

    採用https協議

  2. 接口用來操做數據,與網址(操做頁面)有區別,因此用特定的關鍵字表示接口

    api關鍵字

    --https://api.baidu.com
    --https://www.baidu.com/api
  3. 接口操做的數據稱之爲 資源,在url中只體現資源名稱(名稱),不體現操做的方式動詞

    常規資源接口

    --https://api.baidu.com/books/
    --https://api.baidu.com/books/(pk)/
  4. 若是一個資源存在多版本結果,在url連接中要用特定符號來兼容多版本共存

    v1 | v2

    --https://api.baidu.com/v1/books/
    --https://api.baidu.com/v2/books/
  5. 羣資源操做,通常還有額外的限制條件,若是排序、限制調試、分頁等等

    ? 限制條件

    --https://api.baidu.com/v1/books/?ordering=-price&limit=3

    請求方式:

  6. 五大請求方式

    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)/
    單刪,不須要提供額外數據,完成單刪,不作任何資源返回(通常咱們會返回結果信息:成功|失敗)

    響應結果

  7. 響應對象中要包含網絡狀態碼(網絡轉檯信息和網絡狀態碼捆綁出現,不要額外設置):

    1xxx:基本信息
    2xxx:成功 -200基本  201新增成功
    3xxx:重定向
    4xxx:客戶端錯誤  -404錯誤請求;403請求無權限;404:請求資源不存在
    5xxx:服務器錯誤  -500服務器錯誤
  8. 數據狀態碼(通常都是先後端規定):

    0:成功
    1:失敗  -1xxx:具體失敗信息(要在接口文檔中明確寫出)
    2:無數據 -2xxx:具體無數據信息(要在接口中文檔中明確寫出)
  9. 數據狀態信息(通常不單單是對象數據狀態碼的解釋,更多的對結果的描述,給前臺開發者閱讀的)

  10. 數據結果(常量、數組、字典),若是有子資源(圖片、音頻、視頻),返回資源的url連接

    {
                "status": 0,
                "msg": 'ok',
                "results": [{
                    "name": "西遊記",
                    "img": "https://api.baidu.com/media/book/xyj.png"
                }]
            }

CBV生命週期:

一,django CBV 源碼分析:

1)as_view()是入口,獲得view函數地址(路由層)
2)請求來了調用view函數,內部調用dispatch函數完成請求分發(請求以前)
3)dispatch函數將請求方式映射成視圖類的同名方法,完成請求的處理,獲得相應 (請求執行完畢)
4)再將相應的結果一層層返回 (返回結果)

二,drf CBV源碼分析:

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:後端獲取前端發送的數據(除了文本數據外的全部數據)

drf的優點

能夠在先後端分離的開發中提升開發Rest API接口的效率。

debug的使用

img

建立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文件中/

相關文章
相關標籤/搜索