婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Django drf請(qǐng)求模塊源碼解析

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

熱門標(biāo)簽:地圖標(biāo)注自己和別人標(biāo)注區(qū)別 商家地圖標(biāo)注海報(bào) 聊城語(yǔ)音外呼系統(tǒng) 騰訊地圖標(biāo)注沒(méi)法顯示 ai電銷機(jī)器人的優(yōu)勢(shì) 南陽(yáng)打電話機(jī)器人 海外網(wǎng)吧地圖標(biāo)注注冊(cè) 孝感營(yíng)銷電話機(jī)器人效果怎么樣 打電話機(jī)器人營(yíng)銷

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()去解析,另外還通過(guò)Request對(duì)象添加了上下文requestencoding

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

我們可以分析出,內(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ì)象。接下來(lái)我們可以通過(guò)案例演示

案例演示

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

我們可以清楚的看到:

  • request是drfRequest對(duì)象
  • request下有data屬性,query_params屬性,但是沒(méi)有GET屬性

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

我們可以看到_requestWSGIHttpRequest對(duì)象,所以它會(huì)有GET屬性,所以我們視圖中打印的request.GET實(shí)際上和request._request.GET是一樣的,因?yàn)?code>request沒(méi)有GET屬性,所以它就會(huì)訪問(wèn)_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

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

QueryDict: {'a': ['1']}>
QueryDict: {'a': ['1']}>
QueryDict: {'a': ['1']}>

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

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

QueryDict: {'a': ['1']}>
QueryDict: {'a': ['1']}>
QueryDict: {'a': ['1']}>

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

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

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

QueryDict: {}>
QueryDict: {}>
{'a': 1}

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

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

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

您可能感興趣的文章:
  • Django DRF APIView源碼運(yùn)行流程詳解
  • Django DRF認(rèn)證組件流程實(shí)現(xiàn)原理詳解
  • Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn)
  • django drf框架自帶的路由及最簡(jiǎn)化的視圖
  • django drf框架中的user驗(yàn)證以及JWT拓展的介紹
  • Django框架之DRF 基于mixins來(lái)封裝的視圖詳解
  • DRF跨域后端解決之django-cors-headers的使用
  • django DRF圖片路徑問(wèn)題的解決方法

標(biāo)簽:聊城 撫州 牡丹江 楊凌 六盤水 揚(yáng)州 南寧 迪慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django drf請(qǐng)求模塊源碼解析》,本文關(guān)鍵詞  Django,drf,請(qǐng)求,模塊,源碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django drf請(qǐng)求模塊源碼解析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Django drf請(qǐng)求模塊源碼解析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品亚洲aⅴ乱码一区二区三区| 亚洲电影激情视频网站| 亚洲柠檬福利资源导航| 麻豆精品蜜桃视频网站| 91成人网在线| 国产精品你懂的在线欣赏| 久久国产麻豆精品| 欧美日韩中文另类| 亚洲精品国产第一综合99久久| 国产综合成人久久大片91| 欧美日韩亚洲综合在线| 亚洲视频电影在线| av成人老司机| 国产精品国产馆在线真实露脸 | 久久久国产午夜精品| 香蕉成人啪国产精品视频综合网| 99久久精品99国产精品| 欧美国产欧美综合| 久久99精品久久久久| 337p亚洲精品色噜噜| 亚洲夂夂婷婷色拍ww47| 91麻豆国产福利在线观看| 国产精品久久久久久久久久免费看| 精品亚洲成a人| 久久综合五月天婷婷伊人| 久久综合综合久久综合| 91精品国产高清一区二区三区蜜臀| 亚洲第一成年网| 欧美亚洲另类激情小说| 一区二区不卡在线播放| 在线精品视频一区二区三四| 亚洲精品中文在线影院| 91小视频在线免费看| 亚洲色图一区二区三区| 在线观看中文字幕不卡| 亚洲成在人线免费| 91麻豆精品国产91久久久久| 另类调教123区| 久久久三级国产网站| 成人午夜私人影院| 亚洲美女视频在线| 欧美视频三区在线播放| 青青草国产精品亚洲专区无| 日韩三级在线观看| 国产不卡在线播放| 中文字幕日本乱码精品影院| 色呦呦一区二区三区| 首页综合国产亚洲丝袜| 日韩美女一区二区三区| 成人在线视频一区| 亚洲国产美女搞黄色| 日韩你懂的电影在线观看| 国产成人aaaa| 亚洲一区二区在线播放相泽| 91精品国产91久久久久久一区二区| 裸体一区二区三区| 国产精品第13页| 欧美日韩夫妻久久| 国产精品一级二级三级| 亚洲美女区一区| 日韩小视频在线观看专区| 白白色亚洲国产精品| 日韩精彩视频在线观看| 国产精品美女久久久久久久| 欧美亚洲综合一区| 国产激情视频一区二区在线观看| 日韩理论片一区二区| 欧美一区二区三区爱爱| youjizz国产精品| 日本女优在线视频一区二区| 国产日韩欧美亚洲| 3751色影院一区二区三区| www.色精品| 久久99久久99| 亚洲国产人成综合网站| 国产精品―色哟哟| 欧美一级高清片在线观看| 91在线视频免费观看| 精品一区二区三区av| 亚洲成av人**亚洲成av**| 国产精品少妇自拍| 精品国产99国产精品| 欧美自拍偷拍一区| 成人av在线资源| 久久66热re国产| 午夜视频一区二区| 亚洲桃色在线一区| 国产三级精品视频| 欧美一二区视频| 欧美伦理影视网| 一本色道a无线码一区v| 国产99精品国产| 国产最新精品免费| 另类综合日韩欧美亚洲| 亚洲成av人片一区二区梦乃 | 偷窥少妇高潮呻吟av久久免费| 中文字幕+乱码+中文字幕一区| 精品理论电影在线| 日韩视频免费观看高清完整版 | 亚洲人成7777| 欧美国产亚洲另类动漫| 久久久www免费人成精品| 91精品国产色综合久久不卡电影| 在线视频国内自拍亚洲视频| 99精品偷自拍| 99久久99久久精品免费看蜜桃| 福利一区二区在线| 处破女av一区二区| 成+人+亚洲+综合天堂| 国产精品一卡二卡| 国产精品1024久久| 成人激情文学综合网| 成人午夜视频免费看| 成人免费福利片| eeuss鲁一区二区三区| 99国内精品久久| 欧美在线三级电影| 91精品国产综合久久精品app| 91麻豆精品国产自产在线观看一区| 欧美唯美清纯偷拍| 日韩欧美中文字幕公布| 精品少妇一区二区三区| 久久综合久久鬼色| 亚洲国产成人自拍| 一区二区三区小说| 日本伊人精品一区二区三区观看方式| 日韩av一级电影| 国产精品一二三四五| 91麻豆文化传媒在线观看| 91福利资源站| 日韩亚洲欧美综合| 欧美国产精品一区二区| 怡红院av一区二区三区| 蜜臀久久99精品久久久久久9 | 日韩一区欧美二区| 国内精品免费**视频| 国产成人av一区二区| 色婷婷激情综合| 欧美精选一区二区| 国产偷v国产偷v亚洲高清| 亚洲日本在线观看| 狂野欧美性猛交blacked| 国产成人av一区二区三区在线 | 中文字幕乱码亚洲精品一区| 中文字幕中文字幕在线一区 | 处破女av一区二区| 欧美三级韩国三级日本三斤 | 午夜久久福利影院| 国产一区二区在线视频| 91久久精品一区二区| 日韩视频一区二区在线观看| 亚洲国产精品99久久久久久久久| 一区二区三区四区在线免费观看| 久久99日本精品| 在线一区二区三区做爰视频网站| 亚洲精品在线三区| 一个色妞综合视频在线观看| 国产精品亚洲一区二区三区在线| 欧美丝袜丝nylons| 久久久综合视频| 日韩电影在线观看电影| 91丨九色丨蝌蚪富婆spa| 日韩精品一区二区三区中文精品| 亚洲精品伦理在线| 国产99精品在线观看| 日韩美女天天操| 亚洲一区二区三区四区不卡| 成人精品视频网站| 久久色.com| 久久91精品久久久久久秒播| 欧美三级电影一区| 亚洲精品菠萝久久久久久久| 高清不卡一二三区| 精品免费日韩av| 开心九九激情九九欧美日韩精美视频电影| 色噜噜狠狠一区二区三区果冻| 亚洲国产成人自拍| 国产精品一区二区三区乱码| 日韩欧美一二三区| 青椒成人免费视频| 777xxx欧美| 奇米精品一区二区三区在线观看| 日本精品一级二级| 亚洲另类色综合网站| 91一区二区三区在线观看| 国产精品日韩精品欧美在线| 国产91露脸合集magnet | 日韩亚洲欧美成人一区| 午夜精品福利一区二区三区av | 国产精品亚洲а∨天堂免在线| 日韩欧美在线影院| 麻豆国产精品一区二区三区 | 粗大黑人巨茎大战欧美成人| 久久久久综合网| 福利一区福利二区| 亚洲视频在线一区| 欧美三级蜜桃2在线观看| 无吗不卡中文字幕| 日韩三级免费观看| 国产精品77777竹菊影视小说|