Django REST framework API 指南(1):請求

Django REST framework API 指南(1):請求
Django REST framework API 指南(2):響應
Django REST framework API 指南(3):視圖
Django REST framework API 指南(4):通用視圖
Django REST framework API 指南(5):視圖集
Django REST framework API 指南(6):路由
Django REST framework API 指南(7):解析
Django REST framework API 指南全 27 篇地址html

官方原文連接前端

若是你正在開發基於 REST 的 web API 服務...... 應該忽略 request.POST。 — Malcom Tredinnick,Django 開發組git

REST framework 的 Request 類擴展與標準的 HttpRequest,並作了相應的加強,好比更加靈活的請求解析(request parsing)和認證(request authentication)。github

Request 解析

REST framwork 的 Request 對象提供了靈活的請求解析,容許你使用 JSON data 或 其餘 media types 像一般處理表單數據同樣處理請求。web

.data

request.data 返回請求主題的解析內容。這跟標準的 request.POSTrequest.FILES 相似,而且還具備如下特色:django

  • 包括全部解析的內容,文件(file) 和 非文件(non-file inputs)。
  • 支持解析 POST 之外的 HTTP method , 好比 PUTPATCH
  • 更加靈活,不只僅支持表單數據,傳入一樣的 JSON 數據同樣能夠正確解析,而且不用作額外的處理(意思是前端無論提交的是表單數據,仍是 JSON 數據,.data 都可以正確解析)。

.data 具體操做,之後再說~api

.query_params

request.query_params 等同於 request.GET,不過其名字更加容易理解。瀏覽器

爲了代碼更加清晰可讀,推薦使用 request.query_params ,而不是 Django 中的 request.GET,這樣那夠讓你的代碼更加明顯的體現出 ----- 任何 HTTP method 類型均可能包含查詢參數(query parameters),而不只僅只是 'GET' 請求。bash

.parsers

APIView 類或者 @api_view 裝飾器將根據視圖上設置的 parser_classessettings 文件中的 DEFAULT_PARSER_CLASSES 設置來確保此屬性(.parsers)自動設置爲 Parser 實例列表。session

一般不須要關注該屬性......

若是你非要看看它裏面是什麼,能夠打印出來看看,大概長這樣:

[<rest_framework.parsers.JSONParser object at 0x7fa850202d68>, <rest_framework.parsers.FormParser object at 0x7fa850202be0>, <rest_framework.parsers.MultiPartParser object at 0x7fa850202860>]
複製代碼

恩,包含三個解析器 JSONParserFormParserMultiPartParser

注意: 若是客戶端發送格式錯誤的內容,則訪問 request.data 可能會引起 ParseError 。默認狀況下, REST framework 的 APIView 類或者 @api_view 裝飾器將捕獲錯誤並返回 400 Bad Request 響應。 若是客戶端發送的請求內容沒法解析(不一樣于格式錯誤),則會引起 UnsupportedMediaType 異常,默認狀況下會被捕獲並返回 415 Unsupported Media Type 響應。

內容協商

該請求公開了一些屬性,容許你肯定內容協商階段的結果。這使你能夠實施一些行爲,例如爲不一樣媒體類型選擇不一樣的序列化方案。

.accepted_renderer

渲染器實例是由內容協商階段選擇的。

.accepted_media_type

表示內容協商階段接受的 media type 的字符串。

認證(Authentication)

REST framework 提供了靈活的認證方式:

  • 能夠在 API 的不一樣部分使用不一樣的認證策略。
  • 支持同時使用多個身份驗證策略。
  • 提供與傳入請求關聯的用戶(user)和令牌(token)信息。

.user

request.user 一般會返回 django.contrib.auth.models.User 的一個實例,但其行爲取決於正在使用的身份驗證策略。

若是請求未經身份驗證,則 request.user 的默認值是 django.contrib.auth.models.AnonymousUser 的實例(就是匿名用戶)。

關於 .user 的更多內容,之後再說~

.auth

request.auth 返回任何附加的認證上下文(authentication context)。request.auth 的確切行爲取決於正在使用的身份驗證策略,但它一般多是請求通過身份驗證的令牌(token)實例。

若是請求未經身份驗證,或者沒有附加上下文(context),則 request.auth 的默認值爲 None

關於 .auth 的更多內容,之後再說~

.authenticators

APIView 類或 @api_view 裝飾器將確保根據視圖上設置的 authentication_classes 或基於 settings 文件中的 DEFAULT_AUTHENTICATORS 設置將此屬性(.authenticators)自動設置爲 Authentication 實例列表。

**一般不須要關注該屬性...... **

注意:調用 .user.auth 屬性時可能會引起 WrappedAttributeError 異常。這些錯誤源於 authenticator 做爲一個標準的 AttributeError ,爲了防止它們被外部屬性訪問修改,有必要從新提高爲不一樣的異常類型。Python 沒法識別來自 authenticator 的 AttributeError,並會當即假定請求對象沒有 .user.auth 屬性。authenticator 須要修復。

多說幾句

.authenticators 其實存的就是當前使用的認證器(authenticator)列表,打印出來大概是這樣:

[<rest_framework.authentication.SessionAuthentication object at 0x7f8ae4528710>, <rest_framework.authentication.BasicAuthentication object at 0x7f8ae45286d8>]
複製代碼

能夠看到這裏使用的認證器(authenticator)包括 SessionAuthenticationBasicAuthentication

瀏覽器加強

REST framework 支持基於瀏覽器的 PUTPATCHDELETE 表單。

.method

request.method 返回請求 HTTP 方法的大寫字符串表示形式。如 GET,POST...。

透明地支持基於瀏覽器的 PUTPATCHDELETE 表單。

更多相關信息之後再說~

.content_type

request.content_type 返回表示 HTTP 請求正文的媒體類型(media type)的字符串對象(好比: text/plain , text/html 等),若是沒有提供媒體類型,則返回空字符串。

一般不須要直接訪問此屬性,通常都依賴與 REST 框架的默認請求解析行爲。

不建議使用 request.META.get('HTTP_CONTENT_TYPE') 來獲取 content type 。

更多相關信息之後再說~

.stream

request.stream 返回一個表明請求主體內容的流。

一般不須要直接訪問此屬性,通常都依賴與 REST 框架的默認請求解析行爲。

標準的 HttpRequest 屬性

因爲 REST framework 的 Request 擴展於 Django 的 HttpRequest,全部其餘標準屬性和方法也可用。例如request.METArequest.session 字典均可以正常使用。

請注意,因爲實現緣由,Request 類不會從 HttpRequest 類繼承,而是使用組合擴展類(優先使用組合,而非繼承,恩,老鐵沒毛病 0.0)

最後

靠 google 翻譯加我的理解寫的,請輕點噴(好方)。

而後,打算把官網的 API 指南都過一遍,因此就打算整理成中文的,方便之後看,並且本身動手寫一遍更加便於理解,記憶。

沒看官網 tutorial 的建議先看一遍吧,有人翻譯過: Django Rest Framework 中文版教程

相關文章
相關標籤/搜索