rest_framework之解析器详解 05
解析器就是服務端寫api,對于前端用戶發來的數據進行解析。解析完之后拿到自己能用數據。
本質就是對請求體中的數據進行解析。
django的解析器
post請求過來之后,django 的request.body一定有值,request.post不一定有值。如果想讓request.post有值,必須轉為QueryDict類型的值。
1.urls.py
2.views.py
運行:
打印結果:
3.導入文件 ? ?解析器類
解析器類 源碼流程
4.
post有值 要求1 請求頭要求:
5.請求頭要求:如果請求頭中的 Content-Type: application/x-www-form-urlencoded,request.POST中才有值(去request.body中解析數據)。
post有值 要求2 ?數據格式要求:
name=xiaoming&age=18&gender=男
form表單、ajax請求:默認都是以上這種請求頭和數據格式!
如果ajax請求設置請求頭為json類型,那么post則沒值。body里有值。
原生的django解析器:post有無值的情況
解析器前戲:django:request.POST/ request.body1. 請求頭要求:Content-Type: application/x-www-form-urlencodedPS: 如果請求頭中的 Content-Type: application/x-www-form-urlencoded,request.POST中才有值(去request.body中解析數據)。2. 數據格式要求:name=xiaoming&age=18&gender=男如:a. form表單提交<form method...>input...</form>b. ajax提交$.ajax({url:...type:POST,data:{name:xiaoming,age=18} # 內部轉化 name=alex&age=18&gender=男 })情況一:$.ajax({url:...type:POST,headers:{'Content-Type':"application/json"}data:{name:alex,age=18} # 內部轉化 name=xiaoming&age=18&gender=男 })# body有值;POST無 情況二:$.ajax({url:...type:POST,headers:{'Content-Type':"application/json"}data:JSON.stringfy({name:xiaoming,age=18}) # {name:alex,age:18...} })# body有值;POST無# json.loads(request.body)rest_framework 解析器,對請求體數據進行解析
1.urls.py
2.JSONParser 解析器
from rest_framework.parsers import JSONParser
允許用戶發送json數據 ? ? a. content-type: application/json ? ? b. {name:"xiaoming",age:18}
views.py
post請求:發送 json數據
打印結果:自動解析,自己沒有反序列化。
4.該請求頭不支持。JSONParser 只支持 content-type: application/json
5.想要支持 這種請求頭怎么辦
FormParser:表示只能解析application/x-www-form-urlencoded頭
views.py
源碼:
運行:
打印結果:
請求進了的時候,什么時候調用解析器
request.data觸發了解析器:解析流程
1.請求信息都在Request.data里
from rest_framework.request import Request
看源碼:
2.data
3.解析
4.拿到所有解析器列表、用戶請求頭
5.循環解析器列表,取每一個解析器支持的請求頭。根據解析器支持的請求頭,返回到底應該用哪個解析器
6.選擇解析器之后,則執行解析器的parse方法。
7.比如SONParser 解析器的解析方法。將請求數據解析出來。
請求流程
1.dispatch
2.
3.執行認證之前,先獲取解析器。
4.列表生成器
5.全局配置
目前request 里面有 原生的request、解析器、認證的所有方法 ?3個東西
全局配置解析器
1.settings.py
如果某個視圖僅僅文件上傳,視圖就需要單獨設置解析器。局部配置解析器
# parser_classes = [JSONParser,FormParser,]
?
轉載于:https://www.cnblogs.com/aaronthon/p/9320912.html
總結
以上是生活随笔為你收集整理的rest_framework之解析器详解 05的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构化语句header nav asid
- 下一篇: C# 一般处理程序ashx用于验证码