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
REST framwork 的 Request
對象提供了靈活的請求解析,容許你使用 JSON data 或 其餘 media types 像一般處理表單數據同樣處理請求。web
request.data
返回請求主題的解析內容。這跟標準的 request.POST
和 request.FILES
相似,而且還具備如下特色:django
POST
之外的 HTTP method , 好比 PUT
, PATCH
。.data
都可以正確解析)。.data 具體操做,之後再說~api
request.query_params
等同於 request.GET
,不過其名字更加容易理解。瀏覽器
爲了代碼更加清晰可讀,推薦使用 request.query_params
,而不是 Django 中的 request.GET
,這樣那夠讓你的代碼更加明顯的體現出 ----- 任何 HTTP method 類型均可能包含查詢參數(query parameters),而不只僅只是 'GET' 請求。bash
APIView
類或者 @api_view
裝飾器將根據視圖上設置的 parser_classes
或 settings
文件中的 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>]
複製代碼
恩,包含三個解析器 JSONParser
,FormParser
,MultiPartParser
。
注意: 若是客戶端發送格式錯誤的內容,則訪問
request.data
可能會引起ParseError
。默認狀況下, REST framework 的APIView
類或者@api_view
裝飾器將捕獲錯誤並返回400 Bad Request
響應。 若是客戶端發送的請求內容沒法解析(不一樣于格式錯誤),則會引起UnsupportedMediaType
異常,默認狀況下會被捕獲並返回415 Unsupported Media Type
響應。
該請求公開了一些屬性,容許你肯定內容協商階段的結果。這使你能夠實施一些行爲,例如爲不一樣媒體類型選擇不一樣的序列化方案。
渲染器實例是由內容協商階段選擇的。
表示內容協商階段接受的 media type 的字符串。
REST framework 提供了靈活的認證方式:
request.user
一般會返回 django.contrib.auth.models.User
的一個實例,但其行爲取決於正在使用的身份驗證策略。
若是請求未經身份驗證,則 request.user
的默認值是 django.contrib.auth.models.AnonymousUser
的實例(就是匿名用戶)。
關於 .user
的更多內容,之後再說~
request.auth
返回任何附加的認證上下文(authentication context)。request.auth
的確切行爲取決於正在使用的身份驗證策略,但它一般多是請求通過身份驗證的令牌(token)實例。
若是請求未經身份驗證,或者沒有附加上下文(context),則 request.auth
的默認值爲 None
。
關於 .auth
的更多內容,之後再說~
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)包括 SessionAuthentication
和 BasicAuthentication
。
REST framework 支持基於瀏覽器的 PUT
,PATCH
,DELETE
表單。
request.method
返回請求 HTTP 方法的大寫字符串表示形式。如 GET
,POST
...。
透明地支持基於瀏覽器的 PUT
,PATCH
和 DELETE
表單。
更多相關信息之後再說~
request.content_type
返回表示 HTTP 請求正文的媒體類型(media type)的字符串對象(好比: text/plain
, text/html
等),若是沒有提供媒體類型,則返回空字符串。
一般不須要直接訪問此屬性,通常都依賴與 REST 框架的默認請求解析行爲。
不建議使用 request.META.get('HTTP_CONTENT_TYPE')
來獲取 content type 。
更多相關信息之後再說~
request.stream
返回一個表明請求主體內容的流。
一般不須要直接訪問此屬性,通常都依賴與 REST 框架的默認請求解析行爲。
因爲 REST framework 的 Request
擴展於 Django 的 HttpRequest
,全部其餘標準屬性和方法也可用。例如request.META
和 request.session
字典均可以正常使用。
請注意,因爲實現緣由,Request
類不會從 HttpRequest
類繼承,而是使用組合擴展類(優先使用組合,而非繼承,恩,老鐵沒毛病 0.0)
靠 google 翻譯加我的理解寫的,請輕點噴(好方)。
而後,打算把官網的 API 指南都過一遍,因此就打算整理成中文的,方便之後看,並且本身動手寫一遍更加便於理解,記憶。
沒看官網 tutorial 的建議先看一遍吧,有人翻譯過: Django Rest Framework 中文版教程