如果你正在做基于REST的Web服務...你最好忽略request.POST?!?Malcom Tredinnick, Django developers group
REST framework的Request類擴展了標準的HttpRequest,添加對REST framework的靈活請求解析和請求身份驗證的支持。
REST framework的請求對象提供靈活的請求解析,允許你以與通常處理表單數據相同的方式使用JSON數據或其他媒體類型處理請求。
request.data 返回請求正文的解析內容。這與標準的 request.POST 和 request.FILES 屬性類似,除了下面的:
更多詳細信息請參閱parsers documentation.
request.query_params是request.GET的一個更準確的同義詞。
為了讓你的代碼清晰明了, 我們建議使用 request.query_params 而不是Django標準的request.GET。這樣做有助于保持代碼庫更加正確和明了——任何HTTP方法類型可能包括查詢參數,而不僅僅是GET請求。
APIView類或@api_view裝飾器將根據view中設置的parser_classes集合或基于DEFAULT_PARSER_CLASSES設置,確保此屬性自動設置為Parser實例列表。
你通常并不需要訪問這個屬性。
Note: 如果客戶端發(fā)送格式錯誤的內容,則訪問request.data可能會引發(fā)ParseError。默認情況下REST framework的 APIView類或@api_view裝飾器將捕獲錯誤并返回400 Bad Request響應。
如果客戶端發(fā)送具有無法解析的內容類型的請求,則會引發(fā) UnsupportedMediaType 異常, 默認情況下會捕獲該異常并返回 415 Unsupported Media Type 響應。
請求提供了一些屬性允許你確定內容協(xié)商階段的結果。這允許你實現(xiàn)具體的行為,例如為不同的媒體類型選擇不用的序列化方案。
由內容協(xié)商階段選擇的render實例。
由內容協(xié)商階段接受的媒體類型的字符串。
REST framework 提供了靈活的,每次請求的驗證,讓你能夠: * 對API的不同部分使用不同的身份驗證策略。 * 支持使用多個身份驗證策略。 * 提供與傳入請求相關聯(lián)的用戶和令牌信息。
request.user 通常返回一個 django.contrib.auth.models.User 實例, 盡管該行為取決于所使用的的認證策略。
如果請求未認證則 request.user 的默認值為 django.contrib.auth.models.AnonymousUser的一個實例。
request.auth 返回任何其他身份驗證上下文。 request.auth 的確切行為取決于所使用的的認證策略,但它通常可以是請求被認證的token的實例。
如果請求未認證或者沒有其他上下文,則 request.auth 的默認值為 None.
APIView 類或 @api_view 裝飾器將根據在view中設置的 authentication_classes 或基于DEFAULT_AUTHENTICATORS 設置,確保此屬性自動設置為 Authentication 實例的列表。
你通常并不需要訪問此屬性。
REST framework 支持一些瀏覽器增強功能,例如基于瀏覽器的 PUT, PATCH 和 DELETE 表單。
request.method 返回請求的HTTP方法的 大寫 字符串表示形式。
透明地支持基于瀏覽器的 PUT, PATCH 和 DELETE 表單。
request.content_type 返回表示HTTP請求正文的媒體類型的字符串對象,如果未提供媒體類型,則返回空字符串。
你通常不需要直接訪問請求的內容類型,因為你通常將依賴于REST framework的默認請求解析行為。
如果你確實需要訪問請求的內容類型,你應該使用 .content_type 屬性,而不是使用 request.META.get('HTTP_CONTENT_TYPE'), 因為它為基于瀏覽器的非表單內容提供了透明的支持。
request.stream 返回一個表示請求主體內容的流。
你通常不需要直接訪問請求的內容類型,因為你通常將依賴于REST framework的默認請求解析行為。
由于 REST framework 的 Request 擴展了 Django的 HttpRequest, 所以所有其他標準屬性和方法也是可用的。例如 request.META 和 request.session 字典正??捎?。
請注意,由于實現(xiàn)原因, Request 類并不會從 HttpRequest 類繼承, 而是使用合成擴展類。
更多建議: