RESR API (一)之Requests
Requests
如果您正在做基于REST的Web服務(wù),您應(yīng)該忽略request.POST。
- Malcom Tredinnick,Django開(kāi)發(fā)團(tuán)隊(duì)
REST框架的Request類擴(kuò)展了標(biāo)準(zhǔn)的HttpRequest,增加了對(duì)REST框架請(qǐng)求解析和請(qǐng)求認(rèn)證的支持。
Request parsing
REST框架的Request對(duì)象提供了靈活的請(qǐng)求解析,允許您以與通常處理表單數(shù)據(jù)相同的方式處理JSON數(shù)據(jù)或其他媒體類型的請(qǐng)求。(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返回請(qǐng)求體的解析內(nèi)容。這與標(biāo)準(zhǔn)的request.POST和request.FILES屬性相似,除了:
- 它包括所有解析的內(nèi)容,包括文件和非文件輸入。
- 它支持解析除
POST以外的HTTP方法的內(nèi)容,這意味著您可以訪問(wèn)PUT和PATCH請(qǐng)求的內(nèi)容。 - 它支持REST框架的靈活的請(qǐng)求解析,而不只是支持表單數(shù)據(jù)。例如,您可以像處理表單數(shù)據(jù)那樣處理JSON數(shù)據(jù)。
有關(guān)詳細(xì)信息,請(qǐng)參閱解析器文檔。
.query_params
request.query_params是request.GET的一個(gè)同義詞,但表達(dá)的含義比request.GET更準(zhǔn)確。
建議使用request.query_params,而不使用Django標(biāo)準(zhǔn)的request.GET。這樣有助于讓代碼更準(zhǔn)確和可讀 - 因?yàn)槿魏蜨TTP方法類型可能包括query參數(shù),而不僅僅是GET請(qǐng)求。
.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.
通常您不需要訪問(wèn)此屬性。
注意:如果客戶端發(fā)送的內(nèi)容格式不正確,則訪問(wèn)request.data可能會(huì)拋出ParseError。默認(rèn)情況下,REST框架的APIView類或@api_view裝飾器將捕獲錯(cuò)誤并返回400 Bad Request響應(yīng)。
如果客戶端發(fā)送的內(nèi)容的類型不能被解析,那么將會(huì)拋出UnsupportedMediaType異常,默認(rèn)情況下會(huì)被捕獲并返回415 Unsupported Media Type響應(yīng)。
Content negotiation
request公開(kāi)了一些屬性,允許您決定 the content negotiation stage 的結(jié)果。這允許您實(shí)現(xiàn)一些行為,例如為不同的媒體類型選擇不同的序列化方案。
.accepted_renderer
由 the content negotiation stage 選擇的 renderer實(shí)例。
.accepted_media_type
由 the content negotiation stage 接受的一個(gè)表示媒體類型的字符串。
Authentication
REST框架提供靈活的、per-request 的身份驗(yàn)證,使您能夠:
- 對(duì)API的不同部分使用不同的身份驗(yàn)證策略。
- 支持使用多種認(rèn)證策略。
- 提供與傳入請(qǐng)求相關(guān)聯(lián)的用戶和token信息。
.user
request.user通常返回一個(gè)django.contrib.auth.models.User實(shí)例,盡管行為取決于正在使用的身份驗(yàn)證策略。
如果請(qǐng)求未經(jīng)身份驗(yàn)證,request.user默認(rèn)值為request.userdjango.contrib.auth.models.AnonymousUser的一個(gè)實(shí)例。
有關(guān)詳細(xì)信息,請(qǐng)參閱認(rèn)證文檔。
.auth
request.auth返回任何其他的身份驗(yàn)證上下文。request.auth確切的行為取決于正在使用的身份驗(yàn)證策略,但它通常是被認(rèn)證的請(qǐng)求token的一個(gè)實(shí)例。
如果該請(qǐng)求是未認(rèn)證的或者不存在附加的上下文,request.auth的默認(rèn)為None。
有關(guān)詳細(xì)信息,請(qǐng)參閱認(rèn)證文檔。
.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.
通常您不需要訪問(wèn)此屬性。
Browser enhancements
REST框架支持的幾個(gè)瀏覽器增強(qiáng)功能,例如基于瀏覽器的PUT,PATCH和DELETE forms。
.method
request.method以大寫(xiě)字符串的形式返回request 的HTTP方法。
基于瀏覽器的PUT,PATCH而DELETEforms 顯然被支持。
有關(guān)更多信息,請(qǐng)參閱瀏覽器增強(qiáng)文檔。
.content_type
request.content_type返回一個(gè)表示HTTP請(qǐng)求體媒體類型的字符串對(duì)象,如果沒(méi)有提供媒體類型,則返回一個(gè)空字符串。
通常您不需要直接訪問(wèn)請(qǐng)求的內(nèi)容類型,因?yàn)槟ǔR蕾囉赗EST框架的默認(rèn)請(qǐng)求解析行為。
如果您確實(shí)需要訪問(wèn)請(qǐng)求的內(nèi)容類型,則應(yīng)優(yōu)先使用.content_type屬性而不是request.META.get('HTTP_CONTENT_TYPE'),因?yàn)樗鼮榛跒g覽器的非表單內(nèi)容提供transparent 支持。
有關(guān)更多信息,請(qǐng)參閱瀏覽器增強(qiáng)文檔。
.stream
request.stream 返回一個(gè)表示請(qǐng)求體內(nèi)容的流。
通常您不需要直接訪問(wèn)請(qǐng)求的內(nèi)容,因?yàn)槟ǔ⒁蕾囉赗EST框架的默認(rèn)請(qǐng)求解析行為。
標(biāo)準(zhǔn)HttpRequest屬性
Note that due to implementation reasons the Request class does not inherit from HttpRequest class, but instead extends the class using composition.
總結(jié)
以上是生活随笔為你收集整理的RESR API (一)之Requests的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Docker-Bridge Networ
- 下一篇: AxureRP 9安装、激活、汉化