Django-rest framework框架的安裝配置、簡介、Web API接口和Restful接口規范、基於原生django書寫滿足restful規范的接口


Django-rest framework框架的安裝配置、簡介、Web API接口和Restful接口規范、基於原生django書寫滿足restful規范的接口

drf框架安裝配置

一.安裝

pip3 install djangorestframework

二.配置

# 注冊drf app
INSTALLED_APPS = [
    # ...
    'rest_framework',
]

三.特點

# 具體功能在具體模塊下
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.exceptions import APIException
from rest_framework.filters import OrderingFilter
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination
from rest_framework.settings import APISettings

# 自定義drf配置 - 在自己的settings.py
REST_FRAMEWORK = {
    # 自定義修改drf的配置們
}

什么是drf框架

一、drf優點

1. Django-rest framework可以幫助我們簡化以下兩部分的代碼編寫,大大提高REST API的開發速度。

  • 在序列化與反序列化時,雖然操作的數據不盡相同,但是執行的過程卻是相似的,也就是說這部分代碼是可以復用簡化編寫的。
  • 在開發REST API的視圖中,雖然每個視圖具體操作的數據不同,但增、刪、改、查的實現流程基本套路化,所以這部分代碼也是可以復用簡化編寫的。
    • 增:校驗請求數據 -> 執行反序列化過程 -> 保存數據庫 -> 將保存的對象序列化並返回
    • 刪:判斷要刪除的數據是否存在 -> 執行數據庫刪除
    • 改:判斷要修改的數據是否存在 -> 校驗請求的數據 -> 執行反序列化過程 -> 保存數據庫 -> 將保存的對象序列化並返回
    • 查:查詢數據庫 -> 將數據序列化並返回

2. Django REST framework 框架是一個用於構建Web API 的強大而又靈活的工具。通常簡稱為DRF框架或REST framework。

3. DRF框架是建立在Django框架基礎之上,由Tom Christie大牛二次開發的開源項目。

二、特點

  • 提供了定義序列化器Serializer的方法,可以快速根據 Django ORM 或者其它庫自動序列化/反序列化;
  • 提供了豐富的類視圖、Mixin擴展類,簡化視圖的編寫;
  • 豐富的定制層級:函數視圖、類視圖、視圖集合到自動生成 API,滿足各種需要;
  • 多種身份認證和權限認證方式的支持;
  • 內置了限流系統;
  • 直觀的 API web 界面;
  • 可擴展性,插件豐富

接口規范

drf框架的作用:寫接口

Web API 接口

什么是Web API接口

Web API接口就是通過網絡,規定了前后台信息交互規則的url鏈接,也就是前后台信息交互的媒介

明確了請求方式,提供對應后台所需參數,請求url鏈接可以得到后台的響應數據。

怎么寫接口

參照某種規則(規范)書寫url鏈接,同時根據規則制定請求方式,請求數據與響應結果。

接口的四個核心部分:請求方式、請求地址、請求參數、響應結果。

Web API接口的四大特點

Web API接口和一般的url鏈接還是有區別的,Web API 接口簡單概括有下面四大特點

  • url:長得像返回數據的url鏈接

  • 請求方式:get(取)、post(增)、put(整體改)、patch(局部改)、delete(刪除)

    • 采用get方式請求上方接口
  • 請求參數:json或xml格式的key-value類型數據

    • ak:6E823f587c95f0148c19993539b99295
    • region:上海
    • query:肯德基
    • output:json
  • 響應結果:json或xml格式的數據

    • 上方請求參數的output參數值決定了響應數據的格式

    • # 網絡狀態碼:200
      {
          "status": 0,
          "msg": "ok",
          "results": [
              {
                  "name": "西游記",
                  "img": "https://api.oldboy.com/media/img/xyj.png"
              }
          ]
      }
      

接口文檔的編寫:YApi 接口管理平台

接口文檔:提供給前后台開發人員與測試人員查看

YApi是去哪網大前端技術中心的一個開源可視化接口管理平台。

YApi項目可以搭建在任何本地或雲服務器上,完成后台項目開發時的接口編寫。為開發、測試等人員提供可視化的接口預覽。

YApi進行接口編寫的步驟:

  • 訪問測試網站
  • 創建接口項目
  • 創建接口
  • 編寫接口

接口測試工具:Postman

Postman是一款接口調試工具,是一款免費的可視化軟件,同時支持各種操作系統平台,是測試接口的首選工具。

Postman可以直接從官網:https://www.getpostman.com/downloads/ 下載獲得,然后進行傻瓜式安裝。

Restful 接口規范

Restful 作為目前最流行的API設計規范,一定有着它獨有的魅力:強大、簡潔、易上手。

URL設計

數據的安全保障

url鏈接一般都采用https協議進行傳輸。

​ 注:采用https協議,可以提高數據交互過程中的安全性

接口特征表現

要用api關鍵字標識接口url:

上面兩種形式都可以

​ 注:看到api字眼,就代表該請求url鏈接是完成前后台數據交互的。

多數據版本共存

要在url鏈接中標識數據版本

​ 注:url鏈接中的v1、v2就是不同數據版本的體現(只有在一種數據資源有多版本的情況下)

數據即是資源

接口一般都是完成前后台數據的交互,交互的數據稱之為資源。

eg:

注:一般提倡用資源的復數形式,在url鏈接中盡量不要出現操作資源的動詞,錯誤示范:https://api.baidu.com/delete-user

特殊的接口可以出現動詞,因為這些接口一般沒有一個明確的資源,或是動詞就是接口的核心含義:

資源操作方式由請求方式決定

操作資源一般都會涉及到增刪改查,我們提供請求方式來標識增刪改查動作

eg:

響應狀態碼

正常響應

響應狀態碼2xx:

  • 200:常規請求
  • 201:創建成功

重定向響應

響應狀態碼3xx:

  • 301:永久重定向
  • 302:暫時重定向

客戶端異常

響應狀態碼4xx:

  • 403:請求無權限
  • 404:請求路徑不存在
  • 405:請求方法不存在

服務器異常

響應狀態碼5xx:

  • 500:服務器異常

響應結果

響應數據要有狀態碼、狀態信息以及數據本身

{
     "status":0,    //狀態響應碼
     "message":"ok",    //狀態信息
     "results":[    //響應數據
     {
         "name":"肯德基(羅餐廳)",
         "location":{
             "lat":31.415354,
             "lng":121.357339
            },
         "address":"月羅路2380號",
         "province":"上海市",
         "city":"上海市",
         "area":"寶山區",
         "street_id":"339ed41ae1d6dc320a5cb37c",
         "telephone":"(021)56761006",
         "detail":1,
         "uid":"339ed41ae1d6dc320a5cb37c"
     }
     ...
     ]
}

需要url請求的資源需要訪問資源的請求鏈接

{
    "status": 0,
    "msg": "ok",
    "results":[
        {
            "name": "肯德基",
            "img": "https://image.baidu.com/kfc/001.png"
        }
    ]
}

基於原生django書寫滿足restful規范的接口

兩個url 對應 一個視圖類 完成十大接口,用到路由分發

路由分發需要在app文件夾下也創建一個urls.py文件

項目名下的urls.py

from django.conf.urls import url, include
from django.contrib import admin
from api import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/', views.Test.as_view()),
    # 路由分發
    url(r'^api/', include('api.urls')),
]

app名下的urls.py:api\urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^books/$', views.Book.as_view()),    # 群查
    url(r'^books/(?P<pk>\d+)/$', views.Book.as_view()),   # 單查
]

上面兩個url都對應視圖函數文件內的視圖類Book

view.py

from django.http import JsonResponse
from django.views import View
from . import models
from rest_framework.views import APIView

class Book(View):
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk', None)
        if pk:  # 單查
            book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
            results = book_dic
        else:  # 群查
            book_query = models.Book.objects.values('name', 'price')
            results = list(book_query)
        if not results:
            return JsonResponse({
                'status': 1,
                'msg': 'data error',
            })
        return JsonResponse({
            'status': 0,
            'msg': 'ok',
            'results': results
        })

CBV請求生命周期

as_view()方法完成路由匹配 => url請求會調用as_view()的返回值視圖函數view => 調用dispatch()方法完成請求分發 => 視圖類的具體視圖方法處理請求 => 返回給前台


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM