日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rest_framework之解析器详解 05

發布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。