django restframework模組學習

2021-09-27 05:55:40 字數 3685 閱讀 2390

一、rest_framework模組

rest framework 的 request 類擴充套件與標準的 httprequest,並做了相應的增強,比如更加靈活的請求解析(request parsing)和認證(request authentication)。

1、request 解析

rest framwork 的 request 物件提供了靈活的請求解析,允許你使用 json data 或 其他 media types 像通常處理表單資料一樣處理請求。

.data

request.data 返回請求主題的解析內容。這跟標準的 request.post 和 request.files 類似,並且還具有以下特點:

包括所有解析的內容,檔案(file) 和 非檔案(non-file inputs)。

支援解析 post 以外的 http method , 比如 put, patch。

更加靈活,不僅僅支援表單資料,傳入同樣的 json 資料一樣可以正確解析,並且不用做額外的處理(意思是前端不管提交的是表單資料,還是 json 資料,.data 都能夠正確解析)。

.query_params

request.query_params 等同於 request.get,不過其名字更加容易理解。

為了**更加清晰可讀,推薦使用 request.query_params ,而不是 django 中的 request.get,這樣那夠讓你的**更加明顯的體現出 ----- 任何 http method 型別都可能包含查詢引數(query parameters),而不僅僅只是 'get' 請求。

.parsers

apiview 類或者 @api_view 裝飾器將根據檢視上設定的 parser_classes 或 settings 檔案中的 default_parser_classes 設定來確保此屬性(.parsers)自動設定為 parser 例項列表。

[, , ]

包含三個解析器 jsonparser,formparser,multipartparser。

注意: 如果客戶端傳送格式錯誤的內容,則訪問 request.data 可能會引發 parseerror 。預設情況下, rest framework 的 apiview 類或者 @api_view 裝飾器將捕獲錯誤並返回 400 bad request 響應。 如果客戶端傳送的請求內容無法解析(不同於格式錯誤),則會引發 unsupportedmediatype 異常,預設情況下會**獲並返回 415 unsupported media type 響應。

response響應

與基本的 httpresponse 物件不同,templateresponse 物件保留了檢視提供的用於計算響應的上下文的詳細資訊。直到需要時才會計算最終的響應輸出,也就是在後面的響應過程中進行計算。

rest framework 通過提供乙個 response 類來支援 http 內容協商,該類允許你根據客戶端請求返回不同的表現形式(如: json ,html 等)。

response 是 django 的 ******templateresponse 的子類。response 物件使用資料進行初始化,資料應由 python 物件(native python primitives)組成。然後 rest framework 使用標準的 http 內容協商來確定它應該如何渲染最終響應的內容。

當然,也可以不使用 response 類,直接返回常規 httpresponse 或 streaminghttpresponse 物件。 使用 response 類只是提供了乙個更好的互動方式,它可以返回多種格式。

除非由於某種原因需要大幅度定製 rest framework ,否則應該始終對返回 response 物件的檢視使用 apiview 類或 @api_view 裝飾器。這樣做可以確保檢視執行內容協商,並在檢視返回之前為響應選擇適當的渲染器。

1、建立 response

response()

與普通 httpresponse 物件不同,您不會使用渲染的內容例項化 response 物件。相反,您傳遞的是未渲染的資料,可能包含任何 python 物件。

由於 response 類使用的渲染器不能處理複雜的資料型別(比如 django 的模型例項),所以需要在建立 response 物件之前將資料序列化為基本的資料型別。

你可以使用 rest framework 的 serializer 類來執行序列化的操作,也可以用自己的方式來序列化。

構造方法: response(data, status=none, template_name=none, headers=none, content_type=none)

引數:data: 響應的序列化資料。

status: 響應的狀態**。預設為200。

template_name: 選擇 htmlrenderer 時使用的模板名稱。

headers: 設定 http header,字典型別。

content_type: 響應的內容型別,通常渲染器會根據內容協商的結果自動設定,但有些時候需要手動指定。

屬性.data

還沒有渲染,但已經序列化的響應資料。

.status_code

狀態碼.content

將會返回的響應內容,必須先呼叫 .render() 方法,才能訪問 .content 。

.template_name

只有在 response 的渲染器是 htmlrenderer 或其他自定義模板渲染器時才需要提供。

.accepted_renderer

用於將會返回的響應內容的渲染器例項。

從檢視返回響應之前由 apiview 或 @api_view 自動設定。

.accepted_media_type

內容協商階段選擇的**型別。

從檢視返回響應之前由 apiview 或 @api_view 自動設定。

.renderer_context

將傳遞給渲染器的 .render() 方法的附加的上下文資訊字典。

從檢視返回響應之前由 apiview 或 @api_view 自動設定。

標準 httpresponse 屬性

response 類擴充套件於 ******templateresponse,並且響應中也提供了所有常用的屬性和方法。例如,您可以用標準方式在響應中設定 header:

response = response()

response['cache-control'] = 'no-cache'

.render()

與其他任何 templateresponse 一樣,呼叫此方法將響應的序列化資料呈現為最終響應內容。響應內容將設定為在 accepted_renderer 例項上呼叫 .render(data,accepted_media_type,renderer_context) 方法的結果。

通常不需要自己呼叫 .render() ,因為它是由 django 處理的。

reverse返回url

routers路由

schemas (package)

serializers序列化

settings設定

status狀態碼

templatetags (package)

test測試

throttling限速

urlpatterns

urls

utils (package)

validators驗證器

versioning版本控制器

views檢視

viewsets檢視集

django rest framework許可權控制

暴露唯讀的介面 支援get head options方法,禁用前端更改資料from rest framework import permissions 引入許可權模組 safe methods get head options class readonly permissions.basepermi...

Django REST framework快速入門

django rest framework快速入門 一.django rest framework簡介 1.在開發rest api的檢視中,雖然每個檢視具體操作的資料不同,但增 刪 改 查的實現流程基本套路化,所以這部分 也是可以復用簡化編寫的 增 校驗請求資料 執行反序列化過程 儲存資料庫 將儲存...

django rest framework快取應用

在我們web製作過程中進場使用到快取技術,那麼今天python中的一種簡單便捷的快取技術與大家分享 以下是在省 市 區 聯動的位址查詢做的快取處理 使用快取 省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。在django rest...