請求和響應

2021-09-29 06:58:17 字數 3225 閱讀 5713

如果你正在做基於rest的web服務,你最好忽略request.post和request.get

rest framework的request類擴充套件了標準的httprequest,新增對rest framework的靈活請求解析和請求身份驗證的支援。

rest framework的請求物件提供靈活的請求解析,允許你以與通常處理表單資料相同的方式使用json資料或其他**型別處理請求。

request.data 返回請求正文的解析內容。這與標準的 request.post 和 request.files 屬性類似,但是他將所有的資料報裹在了一起通過.data進行返回。

request.query_params是request.get的乙個更準確的同義詞。包含了所有用過get方式請求的引數

為了讓你的**清晰明了, 建議使用 request.query_params 而不是django標準的request.get。這樣做有助於保持**庫更加正確和明了——任何http方法型別可能包括查詢引數,而不僅僅是get請求。

apiview類或@api_view裝飾器將根據view中設定的parser_classes集合或基於default_parser_classes設定,確保此屬性自動設定為parser例項列表。

這個屬性用於標識此介面所使用的parser解析器, 預設情況下使用default_parser_classes的設定,如果要用自己的,需要進行相關的重寫。

通常並不需要訪問這個屬性。

note: 如果客戶端傳送格式錯誤的內容,則訪問request.data可能會引發parseerror。預設情況下rest framework的 apiview類或@api_view裝飾器將捕獲錯誤並返回400 bad request響應。

如果客戶端傳送具有無法解析的呃逆榮型別的請求,則會引發 unsupportedmediatype 異常, 預設情況下會捕獲該異常並返回 415 unsupported media type 響應。

request.user 通常返回乙個 django.contrib.auth.models.user 例項, 儘管該行為取決於所使用的的認證策略。 這和之前使用的request.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 例項的列表。

通常並不需要訪問這個屬性。

request.method 返回請求的http方法的 大寫 字串表示形式。

透明地支援基於瀏覽器的 put, patch 和 delete 表單。

用於標識傳輸資料的格式型別。 返回表示http請求正文的**型別的字串物件,如果未提供**型別,則返回空字串。

一般不需要知道這個屬性, 而是直接由rest_framework提供的預設解析行為來提供。

如果確實需要知道這個屬性,就使用.content_type而不是request.meta.get(『http_content_type』)

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

你通常不需要直接訪問請求的內容型別,因為你通常將依賴於rest framework的預設請求解析行為。

由於 rest framework 的 request 擴充套件了 django的 httprequest, 所以所有其他標準屬性和方法也是可用的。例如 request.meta 和 request.session 字典正常可用。

請注意,由於實現原因, request 類並不會從 httprequest 類繼承, 而是使用合成擴充套件類。

rest framework 通過提供乙個 response 類來支援 http content negotiation,該類允許你返回可以呈現為多種內容型別的內容,具體取決於客戶端的請求。

response 類的子類 django的 ******templateresponse。response 物件用python基本資料型別初始化。 然後rest framework 使用標準的http content negotiation 來確定如何呈現最終的相應內容。

你並不需要一定是用 response 類,你可以從你的檢視返回常規的 httpresponse 或者 streaminghttpresponse 物件。使用response類只提供了乙個可以呈現多種格式的更好的介面來返回 content-negotiated 的 web api 響應。

除非由於某種原因你要對 rest framework 做大量的自定義,否則你應該始終對返回物件的views使用 apiview 類或者@api_view函式。這樣做可以確保檢視在返回之前能夠執行 content negotiation 並且為響應選擇適當的渲染器。

resp = response()

簽名: response(data, status=none, template_name=none, headers=none, content_type=none)

與常規的 httpresponse 物件不同,你不能使用渲染內容來例項化乙個 response 物件,而是傳遞未渲染的資料,包含任何python基本資料型別。

response 類使用的渲染器無法自行處理像 django model 例項這樣的複雜資料型別,因此你需要在建立 response 物件之前將資料序列化為基本資料型別。

你可以使用 rest framework的 serializer 類來執行此類資料的序列化,或者使用你自定義的來序列化。

引數:.status_code

.content

.template_name

.accepted_renderer

.accepted_media_type

.renderer_context

response 類擴充套件了 ******templateresponse,並且所有常用的屬性和方法都是提供的。

請求和響應

1 response物件的字元輸入流在編碼時候,採用的是iso 8859 1的編碼表 在httpservletresponse介面中,有setcharacterencoding utf 8 方法來設定字元編碼 2 瀏覽器的解碼方式是gb2312,而我們使用的編碼是 utf 8 因此亂碼。sethea...

請求和響應

post方式請求 request.setcharacterencoding utf 8 response.setcontenttype text html charset utf 8 get方式請求 get方式請求的正文是在位址列中,在tomcat8.5版本以後,tomacat伺服器已經幫我們解決了...

請求和響應

from rest framework.request import request rest framework 傳入檢視的request物件不再是django預設的httprequest物件,而是rest framework提供的擴充套件了httprequest類的request類的物件。def...