最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django request.META.get()獲取不到header頭的原因分析

 更新時(shí)間:2021年04月23日 10:47:43   作者:Gradet丶  
這篇文章主要介紹了Django request.META.get()獲取不到header頭的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

在使用Django過(guò)程中需要開(kāi)發(fā)一些API給其他系統(tǒng)使用,為了安全把Token等驗(yàn)證信息放在header頭中。

如何獲?。?/h2>

使用request.META.get("headerkey")來(lái)獲取

注意:

如果headerkey為auth-token,即headers={'auth-token':'1234'}

應(yīng)該使用request.META.get("HTTP_AUTH_TOKEN")獲取

headerkey中的小寫(xiě)轉(zhuǎn)為大寫(xiě),橫線“-”轉(zhuǎn)為下劃線“_”,并且加上前綴HTTP

尤其注意headerkey中不應(yīng)該包含 HTTP前綴,以及符號(hào)"_",否則會(huì)取不到對(duì)應(yīng)的值

補(bǔ)充:Django中獲取參數(shù)(路徑,查詢,請(qǐng)求頭,請(qǐng)求體)

一、通常HTTP協(xié)議向服務(wù)器傳參有幾種途徑

提取URL的特定部分,如/weather/shanghai/2018,可以在服務(wù)器端的路由中用正則表達(dá)式截??;

查詢字符串(query string),形如key1=value1&key2=value2;

請(qǐng)求體(body)中發(fā)送的數(shù)據(jù),比如表單數(shù)據(jù)、json、xml;

在http報(bào)文的頭(header)中。

1.URL中參數(shù)的獲取

在定義路由URL時(shí),可以使用正則表達(dá)式提取參數(shù)的方法從URL中獲取請(qǐng)求參數(shù),Django會(huì)將提取的參數(shù)直接傳遞到視圖的傳入?yún)?shù)中。

1. 1未命名參數(shù)按定義順序傳遞

注意:參數(shù)獲取的順序與url中參數(shù)的位置一一對(duì)應(yīng),不能互換

url(r'^users/([a-z]+)/(\d{4})/$', views.get_user),  
def get_user(request, name, ID):
    print('name=%s' % name)
    print('id=%s' % id)
    return HttpResponse('OK')

1.2 命名參數(shù)按名字傳遞

注意:如果在路由中指定了參數(shù)的名字,name接收參數(shù)時(shí),必須要使用路由中指定的參數(shù)名稱,不能換成其他名字,此時(shí),兩個(gè)參數(shù)位置可以互換。

url(r'^users/(?P<name>[a-z]+)/(?P<id>\d{4})/$', views.users),  
def weather(request, name, id):
    print('name=%s' % name)
    print('id=%s' % id)
    return HttpResponse('OK')

2.獲取請(qǐng)求路徑中的查詢字符串參數(shù)

(形如?k1=v1&k2=v2),可以通過(guò)request.GET屬性獲取,返回QueryDict對(duì)象。

什么是QueryDict對(duì)象?

定義在django.http.QueryDict

HttpRequest對(duì)象的屬性GET、POST都是QueryDict類型的對(duì)象

與python字典不同,QueryDict類型的對(duì)象用來(lái)處理同一個(gè)鍵帶有多個(gè)值的情況

2.1方法get():根據(jù)鍵獲取值

如果一個(gè)鍵同時(shí)擁有多個(gè)值將獲取最后一個(gè)值

如果鍵不存在則返回None值,可以設(shè)置默認(rèn)值進(jìn)行后續(xù)處理

dict.get('key',value)==>可簡(jiǎn)寫(xiě)為: dict['key']

2.2方法getlist():根據(jù)鍵獲取值,值以列表返回,可以獲取指定鍵的所有值

如果鍵不存在則返回空列表[],可以設(shè)置默認(rèn)值進(jìn)行后續(xù)處理

dict.getlist('鍵',默認(rèn)值)   

2.3獲取參數(shù)實(shí)例

訪問(wèn)路徑:/user/qs/?a=1&b=2&a=3

注意:查詢字符串不區(qū)分請(qǐng)求方式,客戶端GET,POST方式的請(qǐng)求,都可以通過(guò)request.GET獲取請(qǐng)求中的查詢字符串?dāng)?shù)據(jù)。

url(r'^qs/$',views.get_value,name='g_v'),  
def get_value(request):
    a = request.GET.get('a')  #3
    b = request.GET.get('b')  #2
    num_list = request.GET.getlist('a') #['1','3']
    print(a)
    print(b)
    print(num_list)  
    return HttpResponse(reverse('user:get_value'))

3.請(qǐng)求體中的參數(shù)  

3.1表單數(shù)據(jù)獲取   

通過(guò)request.POST來(lái)獲取

注意:Django默認(rèn)開(kāi)啟了CSRF防護(hù),會(huì)對(duì)上述請(qǐng)求方式進(jìn)行CSRF防護(hù)驗(yàn)證,在開(kāi)發(fā)測(cè)試時(shí)可以關(guān)閉CSRF防護(hù)機(jī)制,方法為在settings.py文件中注釋掉CSRF中間件

url(r'^getbody/$',views.get_body),
  
def get_body(request):
    form_data = request.POST.get('c')
    print(form_data)
    return HttpResponse(form_data)

3.2非表單數(shù)據(jù)獲取

非表單類型的請(qǐng)求體數(shù)據(jù),Django無(wú)法自動(dòng)解析,可以通過(guò)request.body屬性獲取最原始的請(qǐng)求體數(shù)據(jù),自己按照請(qǐng)求體格式(JSON、XML等)進(jìn)行解析。request.body返回bytes類型

import json  
url(r'^getjson/$',views.get_body_json),  
def get_body_json(request):
    # 得到的是一個(gè)二進(jìn)制數(shù)據(jù)
    json_str = request.body
    print(json_str)                     # b'{\n    "f":200,\n    "d":300\n    \n}'\
    # 對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行解碼,解碼得到j(luò)son數(shù)據(jù)
    json_str = json_str.decode()
    print(json_str)                     # {"f":200,"d":300}
    # 將json數(shù)據(jù)轉(zhuǎn)化成字典形式
    json_data = json.loads(json_str)
    print(json_data)                    # {'f': 200, 'd': 300}
    # 獲取json數(shù)據(jù),使用字典方式取值
    print(json_data['d'])               # 300
    print(json_data['f'])               # 200
    return HttpResponse('ok')

4.例如:Django獲取http請(qǐng)求頭內(nèi)容  

通過(guò)view函數(shù)傳遞過(guò)來(lái)的 reuqest,使用request.META.get("header key")來(lái)獲取

  注意:

header key必須大寫(xiě),前綴必須是"HTTP",后面如果連接符是橫線“-”,要改成下劃線“_”。例如你的header的key為api_auth,那在Django中應(yīng)該使用request.META.get("HTTP_API_AUTH")來(lái)獲取請(qǐng)求頭的數(shù)據(jù)。

5.其他常用HttpRequest對(duì)象屬性

request.method 請(qǐng)求方式

request.path 請(qǐng)求路徑

request.user 請(qǐng)求的用戶對(duì)象

request.FILES 一個(gè)類似于字典的對(duì)象,包含所有的上傳文件

request.encoding 一個(gè)字符串,表示請(qǐng)求的頁(yè)面的完整路徑,不包含域名和參數(shù)部分。

url(r'^otherattr/$', views.other_attr),  
def other_attr(request):
    print(request.method)    # POST
    print(request.path)      # /user/otherattr/
    print(request.encoding)  # None:表示使用瀏覽器的默認(rèn)設(shè)置,一般為utf-8,這個(gè)屬性是可寫(xiě)的,
    # 可以通過(guò)修改它來(lái)修改訪問(wèn)表單數(shù)據(jù)使用的編碼,接下來(lái)對(duì)屬性的任何訪問(wèn)將使用新的encoding值。
  

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Python中的self用法詳解

    Python中的self用法詳解

    在本篇文章里小編給大家整理的是關(guān)于Python中的self用法以及實(shí)例內(nèi)容,需要的朋友們參考下。
    2019-08-08
  • Django的Modelforms用法簡(jiǎn)介

    Django的Modelforms用法簡(jiǎn)介

    這篇文章主要介紹了Django的Modelforms用法簡(jiǎn)介,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 用Python寫(xiě)一個(gè)球球大作戰(zhàn)小游戲

    用Python寫(xiě)一個(gè)球球大作戰(zhàn)小游戲

    這篇文章主要介紹了如何用Python寫(xiě)一個(gè)球球大作戰(zhàn)小游戲,我們需要實(shí)現(xiàn)每位玩家操控一個(gè)可自由移動(dòng)的小球球,通過(guò)滑動(dòng)屏幕,你可以指揮自己的球球在地圖上四處游走,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Django實(shí)現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法

    Django實(shí)現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法

    這篇文章主要介紹了Django實(shí)現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    這篇文章主要介紹了win10系統(tǒng)配置GPU版本Pytorch,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 解決Keras中Embedding層masking與Concatenate層不可調(diào)和的問(wèn)題

    解決Keras中Embedding層masking與Concatenate層不可調(diào)和的問(wèn)題

    這篇文章主要介紹了解決Keras中Embedding層masking與Concatenate層不可調(diào)和的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python腳本,標(biāo)識(shí)符,變量使用,腳本語(yǔ)句,注釋,模塊引用詳解

    Python腳本,標(biāo)識(shí)符,變量使用,腳本語(yǔ)句,注釋,模塊引用詳解

    這篇文章主要為大家詳細(xì)介紹了Python腳本,標(biāo)識(shí)符,變量使用,腳本語(yǔ)句,注釋,模塊引用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • selenium常用API的使用過(guò)程記錄(包括自動(dòng)登錄)

    selenium常用API的使用過(guò)程記錄(包括自動(dòng)登錄)

    selenium是一個(gè)自動(dòng)測(cè)試工具,它可以幫我通過(guò)代碼去實(shí)現(xiàn)驅(qū)動(dòng)瀏覽器自動(dòng)執(zhí)行相應(yīng)的操作,所以我們也可以用它來(lái)做爬蟲(chóng),主要使用selenium的目的是為了跳過(guò)登錄驗(yàn)證,這篇文章主要介紹了selenium的使用過(guò)程記錄,已經(jīng)常用API接口(包括自動(dòng)登錄)
    2024-02-02
  • 一文搞懂Python中subprocess模塊的使用

    一文搞懂Python中subprocess模塊的使用

    subprocess是子流程,即進(jìn)程的意思,該模塊可以啟動(dòng)一個(gè)新進(jìn)程,并連接到它們的輸入/輸出/錯(cuò)誤管道,從而獲取返回值。本文將和大家聊聊subprocess模塊的使用,需要的可以參考一下
    2022-11-11
  • python實(shí)現(xiàn)計(jì)算倒數(shù)的方法

    python實(shí)現(xiàn)計(jì)算倒數(shù)的方法

    這篇文章主要介紹了python實(shí)現(xiàn)計(jì)算倒數(shù)的方法,涉及Python針對(duì)數(shù)學(xué)運(yùn)算操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

葫芦岛市| 武清区| 洪雅县| 望城县| 犍为县| 武清区| 三江| 汉沽区| 乌鲁木齐县| 宁蒗| 仙居县| 河曲县| 凤翔县| 泰顺县| 台前县| 万山特区| 鹿邑县| 邵武市| 和政县| 钟祥市| 昌黎县| 望奎县| 自治县| 南充市| 海口市| 宁波市| 临颍县| 皋兰县| 耿马| 大关县| 同仁县| 宜川县| 大名县| 靖宇县| 繁昌县| 海门市| 女性| 武隆县| 阜南县| 抚宁县| 安宁市|