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