Django REST framework的請求與響應
Django REST framework的請求與響應
Request
REST framework 傳入檢視的request物件不再是Django預設的HttpRequest物件,而是REST framework提供的擴充套件了HttpRequest類的Request類的物件。
REST framework 提供了Parser解析器,在接收到請求後會自動根據Content-Type指明的請求資料型別(如JSON、表單等)將請求資料進行parse解析,解析為類字典物件儲存到Request物件中。
Request物件的資料是自動根據前端傳送資料的格式進行解析之後的結果。
無論前端傳送的哪種格式的資料,我們都可以以統一的方式讀取資料。
1.data
request.data返回解析之後的請求體資料。類似於Django中標準的request.POST屬性,但提供如下特性:
- 包含了對POST、PUT、PATCH請求方式解析後的資料
- 利用了REST framework的parsers解析器,不僅支援表單型別資料,也支援JSON資料
在沒用到Django REST framework之前,Django使用View來處理檢視函式,在DRF中,我們使用APIView來進行處理,APIView是DRF提供的所有檢視的基類,繼承自Django的View父類,DRF檢視至少是繼承自APIView,它與View的區別是,APIView的請求(Request)與響應(Response)是DRF自己封裝好的,而且會對請求進行身份驗證、許可權檢查、流量控制等。
以前使用View,需要我們自己來判斷request.POST還是request.body,非常的麻煩,現在使用APIView,我們可以統一使用request.data,這裡會自動解析好,無須我們來判斷。
2.query_params
request.query_params與Django標準的request.GET相同,只是更換了更正確的名稱而已。
在View中,我們使用request.GET,在DRF的APIView中,我們使用request.query_params
Response
REST framework提供了一個響應類Response,使用該類構造響應物件時,響應的具體資料內容會被轉換(render渲染)成符合前端需求的型別。
REST framework提供了Renderer渲染器,用來根據請求頭中的Accept(接收資料型別宣告)來自動轉換響應資料到對應格式。如果前端請求中未進行Accept宣告,則會採用預設方式處理響應資料,預設為Json資料格式,我們可以通過配置來修改預設響應格式。
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 預設響應渲染類
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 瀏覽API渲染器
)
}
預設返回json資料
設定Accept為text/html就可以返回html資料
響應構造方式
Response(data, status=None, template_name=None, headers=None, content_type=None)
data只需傳遞python的內建型別資料即可。
data不能是複雜結構的資料,如Django的模型類物件,對於這樣的資料我們可以使用Serializer序列化器序列化處理後(轉為了Python字典型別)再傳遞給data引數。
引數說明:
- data: 為響應準備的序列化處理後的資料;
- status: 狀態碼,預設200;
- template_name: 模板名稱,如果使用HTMLRenderer時需指明;
- headers: 用於存放響應頭資訊的字典;
- content_type: 響應資料的Content-Type,通常此引數無需傳遞,REST framework會根據前端所需型別資料來設定該引數。
常用屬性:
1)data
傳給response物件的序列化後,但尚未render處理的資料
2)status_code
狀態碼的數字
3.status_code狀態碼
為了方便設定狀態碼,REST framewrok在rest_framework.status模組中提供了常用狀態碼常量。
1)資訊告知 - 1xx
2)成功 - 2xx
3)重定向 - 3xx
4)客戶端錯誤 - 4xx
5)伺服器錯誤 - 5xx
相關文章
- HTTP的請求與響應HTTP
- HTTP 請求與響應HTTP
- Http請求與響應HTTP
- ThinkPHP 請求與響應PHP
- Django REST framework 分頁DjangoRESTFramework
- Django rest framework之ModelSerializDjangoRESTFramework
- Django REST Framework中的Serializer relationsDjangoRESTFramework
- DRF之請求與響應
- django rest framework serializers小結DjangoRESTFramework
- django rest_framework面經DjangoRESTFramework
- Django REST framework完全入門DjangoRESTFramework
- Django REST Framework Quickstart 專案DjangoRESTFrameworkUI
- http請求頭與響應頭的應用HTTP
- HTTP請求頭與響應頭HTTP
- HTTP請求與響應簡析HTTP
- DRF對Django請求響應做了技術升級Django
- 深入學習和理解Django檢視層:處理請求與響應Django
- Django REST framework API 指南(21):SchemasDjangoRESTFrameworkAPI
- Token認證——Django Rest framework(1)DjangoRESTFramework
- Django REST framework API 指南(6):路由DjangoRESTFrameworkAPI路由
- Django REST framework API 指南(7):解析DjangoRESTFrameworkAPI
- Django REST framework API 指南(8):渲染DjangoRESTFrameworkAPI
- Django REST framework API 指南(27):SettingsDjangoRESTFrameworkAPI
- Django REST framework API 指南(15):限流DjangoRESTFrameworkAPI
- 深度解析Django REST Framework 批量操作DjangoRESTFramework
- Django基礎教程之請求與相應Django
- SpringSession系列-請求與響應重寫SpringGseSession
- Qt - http網路請求與響應QTHTTP
- 作業4_請求與響應
- Spring系列 SpringMVC的請求與資料響應SpringMVC
- Django REST framework 序列化與反序列化(4)DjangoRESTFramework
- django rest framework 檢視原始碼解析DjangoRESTFramework原始碼
- Django REST framework API 指南(17):分頁DjangoRESTFrameworkAPI
- Django REST framework API 指南(18):版本控制DjangoRESTFrameworkAPI
- Django REST framework API 指南(13):認證DjangoRESTFrameworkAPI
- 管理平臺模板 Django REST Framework +ElementUIDjangoRESTFrameworkUI
- View + django-rest-framework序列化ViewDjangoRESTFramework
- Django REST framework API 指南(23):返回 URLDjangoRESTFrameworkAPI