RESR API (一)之Requests
Requests
如果您正在做基于REST的Web服務,您應該忽略request.POST。
- Malcom Tredinnick,Django開發團隊
REST框架的Request類擴展了標準的HttpRequest,增加了對REST框架請求解析和請求認證的支持。
Request parsing
REST框架的Request對象提供了靈活的請求解析,允許您以與通常處理表單數據相同的方式處理JSON數據或其他媒體類型的請求。(REST framework's Request objects provide flexible request parsing that allows you to treat requests with JSON data or other media types in the same way that you would normally deal with form data.)
.data
request.data返回請求體的解析內容。這與標準的request.POST和request.FILES屬性相似,除了:
- 它包括所有解析的內容,包括文件和非文件輸入。
- 它支持解析除
POST以外的HTTP方法的內容,這意味著您可以訪問PUT和PATCH請求的內容。 - 它支持REST框架的靈活的請求解析,而不只是支持表單數據。例如,您可以像處理表單數據那樣處理JSON數據。
有關詳細信息,請參閱解析器文檔。
.query_params
request.query_params是request.GET的一個同義詞,但表達的含義比request.GET更準確。
建議使用request.query_params,而不使用Django標準的request.GET。這樣有助于讓代碼更準確和可讀 - 因為任何HTTP方法類型可能包括query參數,而不僅僅是GET請求。
.parsers
The APIView class or @api_view decorator will ensure that this property is automatically set to a list of Parser instances, based on the parser_classes set on the view or based on the DEFAULT_PARSER_CLASSES setting.
通常您不需要訪問此屬性。
注意:如果客戶端發送的內容格式不正確,則訪問request.data可能會拋出ParseError。默認情況下,REST框架的APIView類或@api_view裝飾器將捕獲錯誤并返回400 Bad Request響應。
如果客戶端發送的內容的類型不能被解析,那么將會拋出UnsupportedMediaType異常,默認情況下會被捕獲并返回415 Unsupported Media Type響應。
Content negotiation
request公開了一些屬性,允許您決定 the content negotiation stage 的結果。這允許您實現一些行為,例如為不同的媒體類型選擇不同的序列化方案。
.accepted_renderer
由 the content negotiation stage 選擇的 renderer實例。
.accepted_media_type
由 the content negotiation stage 接受的一個表示媒體類型的字符串。
Authentication
REST框架提供靈活的、per-request 的身份驗證,使您能夠:
- 對API的不同部分使用不同的身份驗證策略。
- 支持使用多種認證策略。
- 提供與傳入請求相關聯的用戶和token信息。
.user
request.user通常返回一個django.contrib.auth.models.User實例,盡管行為取決于正在使用的身份驗證策略。
如果請求未經身份驗證,request.user默認值為request.userdjango.contrib.auth.models.AnonymousUser的一個實例。
有關詳細信息,請參閱認證文檔。
.auth
request.auth返回任何其他的身份驗證上下文。request.auth確切的行為取決于正在使用的身份驗證策略,但它通常是被認證的請求token的一個實例。
如果該請求是未認證的或者不存在附加的上下文,request.auth的默認為None。
有關詳細信息,請參閱認證文檔。
.authenticators
The APIView class or @api_view decorator will ensure that this property is automatically set to a list of Authentication instances, based on the authentication_classes set on the view or based on the DEFAULT_AUTHENTICATORS setting.
通常您不需要訪問此屬性。
Browser enhancements
REST框架支持的幾個瀏覽器增強功能,例如基于瀏覽器的PUT,PATCH和DELETE forms。
.method
request.method以大寫字符串的形式返回request 的HTTP方法。
基于瀏覽器的PUT,PATCH而DELETEforms 顯然被支持。
有關更多信息,請參閱瀏覽器增強文檔。
.content_type
request.content_type返回一個表示HTTP請求體媒體類型的字符串對象,如果沒有提供媒體類型,則返回一個空字符串。
通常您不需要直接訪問請求的內容類型,因為您通常依賴于REST框架的默認請求解析行為。
如果您確實需要訪問請求的內容類型,則應優先使用.content_type屬性而不是request.META.get('HTTP_CONTENT_TYPE'),因為它為基于瀏覽器的非表單內容提供transparent 支持。
有關更多信息,請參閱瀏覽器增強文檔。
.stream
request.stream 返回一個表示請求體內容的流。
通常您不需要直接訪問請求的內容,因為您通常將依賴于REST框架的默認請求解析行為。
標準HttpRequest屬性
Note that due to implementation reasons the Request class does not inherit from HttpRequest class, but instead extends the class using composition.
總結
以上是生活随笔為你收集整理的RESR API (一)之Requests的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker-Bridge Networ
- 下一篇: AxureRP 9安装、激活、汉化