日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django drf請(qǐng)求模塊源碼解析

瀏覽:223日期:2024-09-04 16:12:05

DRF 框架,全稱為 Django Rest Framework,是 Django 內(nèi)置模塊的擴(kuò)展,用于創(chuàng)建標(biāo)準(zhǔn)化 RESTful API;它利用 ORM 映射數(shù)據(jù)庫(kù),并自定義序列化數(shù)據(jù)進(jìn)行返回,多用于前后端分離項(xiàng)目

項(xiàng)目地址:

https://github.com/encode/django-rest-framework

請(qǐng)求模塊:request對(duì)象

源碼入口

APIView類中dispatch方法中的:request=self.iniialize_request(*args, **kwargs),源碼如下:

def initialize_request(self, request, *args, **kwargs): ''' Returns the initial request object. ''' parser_context = self.get_parser_context(request) return Request(request,parsers=self.get_parsers(),authenticators=self.get_authenticators(),negotiator=self.get_content_negotiator(),parser_context=parser_context )

源碼分析

源碼很簡(jiǎn)單,第1句parser_context = self.get_parser_context(request),我們進(jìn)入方法get_parser_context查看源碼:

'''Returns a dict that is passed through to Parser.parse(),as the `parser_context` keyword argument.'''# Note: Additionally `request` and `encoding` will also be added# to the context by the Request object.return { ’view’: self, ’args’: getattr(self, ’args’, ()), ’kwargs’: getattr(self, ’kwargs’, {})}

上面的代碼的意思是:返回一個(gè)解析的字典以便于Parser.parse()去解析,另外還通過Request對(duì)象添加了上下文request和encoding

第二句返回了一個(gè)Request對(duì)象,點(diǎn)擊進(jìn)入查看

Django drf請(qǐng)求模塊源碼解析

我們可以分析出,內(nèi)部對(duì)request做了二次封裝,_request是一個(gè)HttpRequest對(duì)象,并且Request類中還有__getattr__此方法,代碼如下:

def __getattr__(self, attr): ''' If an attribute does not exist on this instance, then we also attempt to proxy it to the underlying HttpRequest object. ''' try:return getattr(self._request, attr) except AttributeError:return self.__getattribute__(attr)

意思是如果這個(gè)實(shí)例上不存在一個(gè)屬性,那么我們也會(huì)嘗試將其代理到底層HttpRequest對(duì)象。接下來我們可以通過案例演示

案例演示

Django drf請(qǐng)求模塊源碼解析

我們創(chuàng)建了TestView視圖,視圖函數(shù)中打印了3個(gè)request屬性,并且在response上打了一個(gè)斷點(diǎn),接下來通過url訪問視圖,進(jìn)入斷點(diǎn)如下,

Django drf請(qǐng)求模塊源碼解析

我們可以清楚的看到:

request是drf的Request對(duì)象 request下有data屬性,query_params屬性,但是沒有GET屬性

上面還有一個(gè)Protected Attributes屬性,里面包含了_request屬性

Django drf請(qǐng)求模塊源碼解析

我們可以看到_request是WSGIHttpRequest對(duì)象,所以它會(huì)有GET屬性,所以我們視圖中打印的request.GET實(shí)際上和request._request.GET是一樣的,因?yàn)閞equest沒有GET屬性,所以它就會(huì)訪問_request中的GET屬性,最后我們查看打印結(jié)果,如下:

<QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}>

同樣的,POST請(qǐng)求也是如此,我們?cè)谝晥D中添加POST的請(qǐng)求方式,如下:

def post(self, request, *args, **kwargs): print(request.POST) # 兼容 print(request._request.POST) # 二次封裝 print(request.data) # 拓展,兼容性最強(qiáng),3種請(qǐng)求方式都可以 return Response('drf post ok')

我們都知道提交數(shù)據(jù)一般有3種方式

multipart/form-data application/x-www-form-urlencoded application/json

首先我們使用multipart/form-data提交請(qǐng)求數(shù)據(jù),并請(qǐng)求API

Django drf請(qǐng)求模塊源碼解析

我們查看pycharm打印結(jié)果

<QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}>

可以看到multipart/form-data這種請(qǐng)求方式,都能打印出來

接著我們使用application/x-www-form-urlencoded提交請(qǐng)求數(shù)據(jù),并請(qǐng)求API

Django drf請(qǐng)求模塊源碼解析

<QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}><QueryDict: {’a’: [’1’]}>

可以看到application/x-www-form-urlencoded這種請(qǐng)求方式,都能打印出來

最后我們使用application/json提交請(qǐng)求數(shù)據(jù),并請(qǐng)求API

Django drf請(qǐng)求模塊源碼解析

可以看到application/json這種請(qǐng)求方式,只有request.data能打印出來

<QueryDict: {}><QueryDict: {}>{’a’: 1}

所以request.data兼容性最強(qiáng)

總結(jié)drf對(duì)request進(jìn)行了二次封裝,request._request就是原生的WSGIRequest原生request的屬性和方法都可以被drf的request對(duì)象直接訪問(兼容)drf請(qǐng)求的所有url拼接參數(shù)均被解析到query_params中,所有的數(shù)據(jù)包均被解析到data中其中post請(qǐng)求,request.data的兼容性最強(qiáng),能兼容前臺(tái)傳輸?shù)膉son格式的數(shù)據(jù)

到此這篇關(guān)于Django(48)drf請(qǐng)求模塊源碼分析 的文章就介紹到這了,更多相關(guān)Django drf源碼內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜在线视频观看日韩17c| 国产精品亚洲片在线播放| 欧美激情在线精品一区二区三区| 综合激情视频| 亚洲天堂日韩在线| 婷婷视频一区二区三区| 亚洲精品国模| 日本不卡视频在线| 欧美欧美黄在线二区| 综合亚洲视频| 97久久超碰| 老色鬼精品视频在线观看播放| 久久av综合| 精品网站999| av免费不卡国产观看| 激情中国色综合| 日韩精品不卡一区二区| 久久国产小视频| 黄色亚洲免费| 亚洲日韩中文字幕一区| 亚洲尤物av| 国产日韩欧美一区在线| 麻豆精品视频在线| 欧美aa一级| 国产一区日韩欧美| 亚洲精品四区| 久久wwww| 国产99久久久国产精品成人免费| 国产精品色网| 国产亚洲久久| 黄色在线网站噜噜噜| 欧美+亚洲+精品+三区| 中文字幕乱码亚洲无线精品一区| 国产亚洲精品美女久久久久久久久久| 国产精品二区不卡| 婷婷久久一区| 91麻豆精品| 欧洲一区二区三区精品| 国产日韩专区| 欧美一区自拍| 日韩成人亚洲| 日本不卡一二三区黄网| 成人国产精选| 一区二区视频欧美| 国产精品久久久久久模特| 黑人精品一区| 蜜臀av国产精品久久久久| 国产伦理一区| 亚洲高清毛片| 国产欧美日韩免费观看| 久久久噜噜噜| 日本国产欧美| 99精品视频在线观看免费播放| 蜜桃视频在线观看一区| 久久丁香四色| 亚洲经典在线| 精品亚洲a∨| 免费在线成人网| 日韩成人a**站| 亚洲免费福利一区| 亚洲天堂1区| 久久国产生活片100| 亚洲夜间福利| 麻豆精品在线| 亚洲毛片在线| 五月天久久777| 久久久久亚洲精品中文字幕| 亚洲欧美日韩专区| 久久天堂影院| 亚洲伊人精品酒店| 亚洲精品国产嫩草在线观看 | 精品久久久网| 人人精品人人爱| 亚洲成人不卡| 国产精品**亚洲精品| 男人的天堂久久精品| 青青久久av| 精品一区电影| 国产欧美一区二区色老头| 日韩一区二区免费看| 国产精品毛片久久| 日韩av资源网| 性欧美长视频| 久久人人88| 国产精品久久观看| 国产精品男女| 亚洲va久久久噜噜噜久久| 国产一区视频在线观看免费| 日韩不卡一区| 国产精品66| 日本午夜精品久久久久| 免费观看在线综合| 亚洲精品电影| 日韩中文在线播放| 国产一区二区三区不卡视频网站| 日本精品在线播放| 欧美精品自拍| 久久久蜜桃一区二区人| 岛国av在线网站| 国产精品激情电影| 欧美日韩午夜| 日本亚洲视频在线| 中文字幕成人| 综合干狼人综合首页| 性色一区二区| 亚洲欧美久久久| 中文日韩欧美| 日韩午夜精品| 黄色日韩在线| 中文国产一区| 亚洲自拍另类| 亚洲激情国产| 91精品二区| 女人天堂亚洲aⅴ在线观看| 久久三级福利| 在线日韩av| 欧美在线亚洲| 美女日韩在线中文字幕| 亚洲欧美日韩在线观看a三区| 在线综合亚洲| 伊人久久大香伊蕉在人线观看热v| 中文亚洲欧美| 免费在线观看精品| 亚州av日韩av| 欧美久久香蕉| 久久福利在线| 久久精品日韩欧美| 精品三级久久久| 国产传媒在线| 久久精品亚洲欧美日韩精品中文字幕| 久久久夜精品| 亚洲欧美日韩一区在线观看| 综合激情网站| 国产欧美日韩| 精品一区二区三区的国产在线观看| 国产一区二区三区久久久久久久久| 国产一区调教| 日韩一区二区在线免费| 天堂网av成人| 亚洲中字黄色| 91精品国产自产在线丝袜啪| 91欧美极品| 精品国产中文字幕第一页| 成人国产精品久久| 91精品精品| 免费在线看一区| 欧美精品国产一区| 国产一区调教| 欧美日韩激情在线一区二区三区| 性一交一乱一区二区洋洋av| 日本一区免费网站| 欧美国产先锋| 黄毛片在线观看| 最新亚洲激情| 亚洲精品乱码| 精品黄色一级片| 成人日韩在线观看| 午夜亚洲精品| 久久国产生活片100| 国产盗摄——sm在线视频| 99免费精品| 亚洲精品自拍| 国产精品久久久久蜜臀| 黄色亚洲在线| 国产精品自拍区| 日韩免费小视频| 亚洲天堂日韩在线| 激情久久99| 免费久久99精品国产自在现线| 国产精品流白浆在线观看| 日韩欧美另类一区二区| 在线综合欧美| 麻豆一区二区三区| 亚洲激情另类| 国产精品伦一区二区| 久久激情中文| 日韩欧美高清一区二区三区| 国产+成+人+亚洲欧洲在线| 136国产福利精品导航网址| 日本亚洲最大的色成网站www | 亚洲三级欧美| 男人的天堂亚洲一区| 免费精品一区| 在线成人直播| 欧美国产先锋| 国产精品试看| 精品久久97| 在线观看一区| 久久三级视频| 国产精品亚洲综合色区韩国| 国产综合亚洲精品一区二| 国产日韩欧美高清免费| 美女网站一区| 免费一级欧美片在线观看网站 | 高清在线一区| 日韩欧美中文字幕在线视频| 日本免费久久| 欧美久久久网站| 一本一本久久| 日韩在线第七页|