drf框架 基礎

2022-08-22 10:06:10 字數 4794 閱讀 3697

目錄響應渲染模組

請求資料解析模組

響應模組

根據客戶端傳回的需求,進行路由匹配,呼叫相應的介面,然後介面執行完成的的資料,按照需要的格式進行返回。

一般採用安全協議,因為介面都是對資料進行操作

在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...