DRF框架基礎

DRF框架基礎

一、接口

一、什麼是接口

接口:前臺與後臺進行信息交互的媒介 - url連接git

二、接口組成

url連接:長得像返回數據的url連接數據庫

請求方式:get(查)、post(增)、put(總體改)、patch(局部改)、delete(刪)django

請求參數:拼接參數、數據包參數(urlencolded、form-data、json)json

響應結果:響應json數據api

三、開發階段接口測試工具

一、安裝postman,同時支持各類操做系統,測試接口用的瀏覽器

Postman直接下載安裝便可安全

二、使用:服務器

建立簡單get請求測試restful

簡單post請求網絡

請求百度地圖接口案例

四、接口文檔

一、爲何要寫接口文檔

首先要知道咱們爲何要寫接口:做爲後臺開發者,要將後臺數據經過url連接反饋給前臺

爲何要寫文檔:由於涉及到前臺與後臺的交互,要知道該url 連接時說明請求方式、提交哪些數據、返回哪些結果

接口文檔就是給後臺開發、前臺開發、測試等各項目相關項目組同時查看的,方便團隊開發(規則是後臺來制定的,文檔也是後臺來寫的)

二、採用什麼編寫文檔

  1. 採用word編寫

  2. drf框架插件,能夠根據CBV的類快速生成文檔,可是規定類要徹底符合規範

  3. 通常大多都採用寫文檔的平臺,好比YAPI、或者本身達服務器編寫文檔平臺

三、書寫過程

一、先安裝開發須要,完成接口的開發(設置後臺url請求方式、請求數據、響應結果)

二、選擇一個接口平臺,將後臺的url連接,請求方式,請求數據,響應結果等信息轉換成文檔便可(此處咱們用YAPI示例)

  1. 進入平臺後

  1. 新建項目

  1. 建立接口

  1. 編寫接口

 

 

二、接口規範

一、爲何要指定接口規範

先後臺分離的狀況下,後臺能夠採用不一樣的後臺運用,開發出相似的功能,因此先後臺請求響應的規則是一致的,若是按照一套標準來編寫接口,後臺不論是什麼語言,前臺不論是什麼請求(頁面、工具、代碼)先後臺都你進行交互

二、通用的接口規範:restful接口規範

規定了url如何編寫,請求方式的含義,響應的數據規則

一、url編寫

  1. HTTPS協議:內部採用了加密和解密保證了數據的安全性

  2. api字眼:標識操做的是數據,https://www.baidu.con/api

  3. v1/v2字眼:數據點不一樣版本共存,https://api.baidu.com/v2

  4. 資源複數:交互的數據咱們稱爲資源,https://api.baidu.com/books,通常不要出現動詞,除非特例好比search、login

  5. 拼接條件:過濾羣查接口數據(https://api.baidu.com/books/?limit=3&ordering=-price

二、請求方式

    /books/ - get - 羣查
    /books/(pk)/ - get - 單查
    /books/ - post - 單增
    /books/(pk)/ - put - 單總體改
    /books/(pk)/ - patch - 單局部改
    /books/(pk)/ - delete - 單刪

三、響應結果

網絡狀態碼與狀態信息:2xx | 3xx | 4xx | 5xx

數據狀態碼:先後臺約定規則 - 0:成功 1:失敗 2:成功沒結果

數據狀態信息:自定義失敗和成功時的的信息接收(英文)

數據本體:json數據

數據資源:頭像、視頻等用url連接

三、FBV與CBV區別

一、路由綁定

FBV:url(r'^test/$', views.test),

  1. 項目啓動,將test函數地址綁定給 /test/ 路由

  2. 請求/test/訪問後臺,後臺就會從view中調用綁定的test函數

CBV:url(r'^test/$', views.Test.as_view()),

  1. 項目啓動,將as_view()函數的執行結果返回給view函數地址綁定的/test/路由

  2. 請求/test/訪問後臺,後臺就會調用綁定的view函數

  3. view函數會將請求交個dispatch方法完成分發,分發(反射)給視圖類的不一樣方法處理不一樣的請求

二、業務處理

FBV:每個接口都會對應一個函數來響應請求

CBV:能夠將一個資源的增刪改查全部操做都放在一個類中管理,在內部再分方法逐一處理(高內聚低耦合:六個接口和一個類有關,但都能在類內部處理)

CBV使用:

  1. url中導入views,類後.as_view() , ( url(r'^test/$', views.Test.as_view()),)

  2. 在views中導入View,三種導入方式:

    from django.views import View
    from django.views.generc import View
    from django.views.generc.base import View
  3. 自定義類繼承View

    目的:一、繼承as_view()方法,完成路由配置,二、繼承dispatch()方法,完成請求分發,三、若是本身寫了as_view()和dispatch()方法自定義視圖類就能夠不用繼承任何類了

    class Test(View):
        def get(self, request, *args, **kwargs):
            return JsonResponse('cbv ok', safe=False)
    ​
        def post(self, request, *args, **kwargs):
            pass

四、DRF框架安裝

一、安裝

pip install djangorestframework

二、註冊

在settings中APPS註冊

INSTALLED_APPS = [
    # ...
    'rest_framework',
]

三、settings中自定義drf配置

drf配置的查找順序:自定義的settings中的REST_FRAMEWORK配置字典再到drf默認的setts的DEFAULTS

# 自定義drf配置
REST_FRAMEWORK = {
}

四、drf 的封裝特色

特色功能在特色的功能模塊下面

from rest_framework.views import APIView  # 視圖相關
from rest_framework.response import Response  # 響應相關
from rest_framework.request import Request  # 請求相關
from rest_framework.exceptions import APIException  # 異常相關
from rest_framework.filters import SearchFilter  # 搜索過濾相關
from rest_framework.pagination import PageNumberPagination  # 分頁相關
from rest_framework.authentication import BaseAuthentication  # 認證
from rest_framework.settings import APISettings  # 配置

五、後臺(admin)可視化管理數據

一、在models.py中建立Model類

class Books(models.Model):
    # verbose_name 可視化將name變爲'書名'
    name = models.CharField(max_length=32, verbose_name='書名')
    # 數字最長5位,包含小數兩位
    price = models.DecimalField(max_digits=5, decimal_places=2)
​
    # 配置類,可視化
    class Meta:
        verbose_name_plural='圖書'def __str__(self):
        return self.name

二、在admin.py中註冊Model類,方便後臺admin可視化管理數據

from django.contrib import admin
from . import models
# admin要控制的model都須要註冊一下
admin.site.register(models.Books)

三、執行數據庫遷移命令

makemigrations => migrate => 建立管理員createsuperuser => admin | admin123

四、瀏覽器登陸admin錄入數據

六、基於restful接口規範接口設計與實現單查羣查接口

一、url接口設計

urlpatterns = [
    # 資源books接口的設計
    url(r'^books/$', views.BookAPIView.as_view()),  # 羣查、單增
    url(r'^books/(?P<pk>\d+)/$', views.BookAPIView.as_view()),  # 單查、單刪、單(總體|局部)改
]

二、實現單查與羣查接口

from rest_framework.views import APIView
from rest_framework.response import Response
from . import models
class BookAPIView(APIView):
    def _multiple_get(self):
        # 不能返回,數據是QuerySet[Obj, Obj],也不能強制轉換list
        # return list(models.Book.objects.all())

        # QuerySet[dict, dict]
        # print(models.Book.objects.values('name', 'price'))
        # QuerySet[tuple, tuple]
        # print(models.Book.objects.values_list('name', 'price'))

        return Response(list(models.Book.objects.values('name', 'price')))

    def _single_get(self, pk):
        # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first())

        # 開發階段建議能用try的地方,不要使用if判斷
        try:
            return Response(models.Book.objects.values('name', 'price').get(pk=pk))
        except:
            return Response('資源不存在')


    # 單查、羣查
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if pk:
            # 單查邏輯
            return self._single_get(pk)
        else:
            # 羣查邏輯
            return self._multiple_get()
相關文章
相關標籤/搜索