1.1 Request
REST framework 傳入視圖的request對象不再是Django默認(rèn)的HttpRequest對象猾警,而是REST framework提供的擴(kuò)展了HttpRequest類的Request類的對象。
REST framework 提供了Parser解析器曼验,在接收到請求后會自動根據(jù)Content-Type指明的請求數(shù)據(jù)類型(如JSON考阱、表單等)將請求數(shù)據(jù)進(jìn)行parse解析翠忠,解析為類字典對象保存到Request對象中。
Request對象的數(shù)據(jù)是自動根據(jù)前端發(fā)送數(shù)據(jù)的格式進(jìn)行解析之后的結(jié)果乞榨。
無論前端發(fā)送的哪種格式的數(shù)據(jù)秽之,我們都可以以統(tǒng)一的方式讀取數(shù)據(jù)当娱。
常用屬性
1).data
request.data 返回解析之后的請求體數(shù)據(jù)。類似于Django中標(biāo)準(zhǔn)的request.POST和 request.FILES屬性考榨,但提供如下特性:
包含了解析之后的文件和非文件數(shù)據(jù)
包含了對POST跨细、PUT、PATCH請求方式解析后的數(shù)據(jù)
利用了REST framework的parsers解析器河质,不僅支持表單類型數(shù)據(jù)冀惭,也支持JSON數(shù)據(jù)
2).query_params
request.query_params與Django標(biāo)準(zhǔn)的request.GET相同,只是更換了更正確的名稱而已愤诱。
1.2 Response
rest_framework.response.Response
REST framework提供了一個響應(yīng)類Response云头,使用該類構(gòu)造響應(yīng)對象時,響應(yīng)的具體數(shù)據(jù)內(nèi)容會被轉(zhuǎn)換(render渲染)成符合前端需求的類型淫半。
REST framework提供了Renderer 渲染器溃槐,用來根據(jù)請求頭中的Accept(接收數(shù)據(jù)類型聲明)來自動轉(zhuǎn)換響應(yīng)數(shù)據(jù)到對應(yīng)格式。如果前端請求中未進(jìn)行Accept聲明科吭,則會采用默認(rèn)方式處理響應(yīng)數(shù)據(jù)昏滴,我們可以通過配置setting.py文件來修改默認(rèn)響應(yīng)格式
REST_FRAMEWORK = {
? ? 'DEFAULT_RENDERER_CLASSES': (? # 默認(rèn)響應(yīng)渲染類
? ? ? ? 'rest_framework.renderers.JSONRenderer',? # json渲染器
? ? ? ? 'rest_framework.renderers.BrowsableAPIRenderer',? # 瀏覽API渲染器
? ? )
}
? ? 構(gòu)造方式
Response(data, status=None, template_name=None, headers=None, content_type=None)
data數(shù)據(jù)不要是render處理之后的數(shù)據(jù),只需傳遞python的內(nèi)建類型數(shù)據(jù)即可对人,REST framework會使用renderer渲染器處理data谣殊。
注意:
這里說的python的內(nèi)建類型數(shù)據(jù),指的是python字典牺弄。
data參數(shù)類型為字典姻几。
data不能是復(fù)雜結(jié)構(gòu)的數(shù)據(jù),如Django的模型類對象势告,對于這樣的數(shù)據(jù)我們可以使用Serializer序列化器序列化處理后(轉(zhuǎn)為了Python字典類型)再傳遞給data參數(shù)蛇捌。
參數(shù)說明:
data: 為響應(yīng)準(zhǔn)備的序列化處理后的數(shù)據(jù);
status: 狀態(tài)碼咱台,默認(rèn)200络拌;
template_name: 模板名稱,如果使用HTMLRenderer 時需指明回溺;
headers: 用于存放響應(yīng)頭信息的字典春贸;
content_type: 響應(yīng)數(shù)據(jù)的Content-Type,通常此參數(shù)無需傳遞遗遵,REST framework會根據(jù)前端所需類型數(shù)據(jù)來設(shè)置該參數(shù)萍恕。
常用屬性:
1).data
傳給response對象的序列化后,但尚未render處理的數(shù)據(jù)
2).status_code
狀態(tài)碼的數(shù)字
3).content
經(jīng)過render處理后的響應(yīng)數(shù)據(jù)