[Django Rest framework文檔翻譯]-Request

REST framework的Request類擴展自標準的HttpRequest,增加了REST framework靈活的請求解析和請求驗證支持。


請求解析

REST framework的Request對象提供了靈活的請求解析,讓你可以像一般處理普通form數據一樣處理帶JSON數據或者媒體類型的request。

.data

request.data返回request body解析后的內容。這類似于標準的request.POSTrequest.FILES屬性除了下面幾個區別:

  • 它包含了所有解析后的內容,包括文件類型和非文件類型的輸入
  • 它支持除了POST類型以外的其他HTTP方法的內容解析,意味著你可以訪問PUTPATCH類型reqeust的內容。
  • 它提供REST framework靈活的請求解析,而不單單支持from數據。舉例說你可以像處理form數據一樣處理JSON數據。
    詳細信息,參考parsers documentation

.query_params

request.query_params 是比request.GET更貼切的一個同義詞
為了清楚起見,在你的代碼里,我們推薦你使用request.query_params來代替Django's標準request.GET。這樣做可以讓你的代碼更準確和明了-任何HTTP方法類型都可能包含查詢信息,不緊緊是GET請求。

.parsers

APIView類或者@api_view 裝飾器將保證這個屬性會被自動賦予一系列的Parser實例,基于這個view的parser_class集合或者基于DEFAULT_PARSER_CLASSES設置
你一般不會訪問這個屬性


如果一個客戶端發送了有缺陷的內容,那么訪問request.data也許會引起ParseError。默認情況下REST framework的APIView類或者@api_view裝飾器將會捕獲這個錯誤然后返回400 Bad Request的response

如果一個客戶端發送了一個包含有不能解析的content-type那么將會引起一個UnsupportedMediaType異常,這個異常將會被捕獲并且返回一個415 Unsupported Media Type response


內容協商

request暴漏了一些屬性是允許你去判斷內容協商階段的結果。這將允許你去實現一些行為比如給不同的媒體類型選擇一個不同的序列化方案

.accepted_renderer

內容協商階段選出來的渲染器實例

.accepted_media_type

是一個字符串用來表明內容協商階段接受的媒體類型


驗證

REST framework提供了靈活的,針對每一個請求的驗證,可以給你的這樣的能力:

  • 不同部分的API使用不同的驗證策略
  • 支持使用多個驗證策略
  • 同時提供即將到來的request相關的user和token信息

.user

request.user一般返回django.contrib.auth.models.User的一個實例,盡管它的行為取決于你使用的驗證策略。
如果request沒有驗證,那么request.user的默認值的jdango.contrib.auth.models.AnonymousUser
更多信息,查看authentication documentation

.auth

request.auth返回任何額外的授權上下文。reqeust.auth的具體行為取決于使用的認證策略,但一般來說它會是reqeuset請求授權得到token的實例。
更多詳細信息請看 authentication documentation

.authenticators

APIView類或者@api_view裝飾器將會保證這個屬性被自動設置為一列Authentication的實例,基于authentication_classes集合或者基于DEFAULT_AUTHENTICATORS設置。
你一般不需要訪問這個屬性


瀏覽器增強

REST framework支持一些瀏覽器增強比如說是基于瀏覽器的PUT,PATCH和DELETE表單

.method

request.method返回請求的HTTP方法大寫的字符串表達。
基于瀏覽器PUT,PATCH,DELETE表單被支持

.content_type

request.content_type,返回一個代表HTTP請求body媒體類型的字符串對象,或者一個空串如果沒有媒體類型提供的話。你一般不需要直接訪問請求的內容類型,因為一般來說你會基于REST框架的默認解析行為
如果你確實需要訪問request的媒體類型,你應該使用.content_type屬性優先于使用request.META.get('HTTP_CONTENT_TYPE'),因為它提供基于瀏覽器的非form內容。
.stream
request.stream返回request body的流的展現方式
你一般不會直接訪問request的內容,因為你一般會基于REST 框架的默認請求解析實現


標準HttpRequest屬性

因為REST framework的Request類擴展自Django's的HttpRequest,所有其他的標準的屬性和方法都是可用的。舉例來說request.METArequest.session字典都和之前一樣
注意因為實現的原因,Request類不是直接繼承子HttpRequest類,而是使用組合擴展了它

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,836評論 18 139
  • Requests請求 If you're doing REST-based web service stuff ....
    陽光小鎮少爺閱讀 920評論 0 1
  • 一說到REST,我想大家的第一反應就是“啊,就是那種前后臺通信方式。”但是在要求詳細講述它所提出的各個約束,以及如...
    時待吾閱讀 3,448評論 0 19
  • 一、request REST framework的 Request 擴展了標準的 HttpRequest,添加支持...
    常大鵬閱讀 2,201評論 0 3
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,081評論 6 13