av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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

瀏覽:63日期:2024-09-10 08:49:04

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

如何獲取:

使用request.META.get('headerkey')來獲取

注意:

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

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

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

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

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

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

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

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

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

在http報文的頭(header)中。

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

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

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

注意:參數(shù)獲取的順序與url中參數(shù)的位置一一對應(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ù)位置可以互換。

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.獲取請求路徑中的查詢字符串參數(shù)

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

什么是QueryDict對象?

定義在django.http.QueryDict

HttpRequest對象的屬性GET、POST都是QueryDict類型的對象

與python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況

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

如果一個鍵同時擁有多個值將獲取最后一個值

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

dict.get(’key’,value)==>可簡寫為: dict[’key’]

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

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

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

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

訪問路徑:/user/qs/?a=1&b=2&a=3

注意:查詢字符串不區(qū)分請求方式,客戶端GET,POST方式的請求,都可以通過request.GET獲取請求中的查詢字符串?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.請求體中的參數(shù)

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

通過request.POST來獲取

注意:Django默認(rèn)開啟了CSRF防護(hù),會對上述請求方式進(jìn)行CSRF防護(hù)驗(yàn)證,在開發(fā)測試時可以關(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ù)獲取

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

import json url(r’^getjson/$’,views.get_body_json), def get_body_json(request): # 得到的是一個二進(jìn)制數(shù)據(jù) json_str = request.body print(json_str) # b’{n 'f':200,n 'd':300n n}’ # 對二進(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請求頭內(nèi)容

通過view函數(shù)傳遞過來的 reuqest,使用request.META.get('header key')來獲取

注意:

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

5.其他常用HttpRequest對象屬性

request.method 請求方式

request.path 請求路徑

request.user 請求的用戶對象

request.FILES 一個類似于字典的對象,包含所有的上傳文件

request.encoding 一個字符串,表示請求的頁面的完整路徑,不包含域名和參數(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,這個屬性是可寫的, # 可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 91黄色免费看| 嫩草黄色影院 | 久久99精品久久久久久国产越南 | 成人免费视频7777777 | 国产亚洲一区二区三区 | 一区二区三区视频免费看 | 国产精品成人一区二区三区 | 成人在线播放网站 | 亚洲日本一区二区三区四区 | 日本aa毛片a级毛片免费观看 | 亚洲国产中文字幕 | 欧美精品一区二区三区蜜桃视频 | 精品久久久久国产 | 午夜免费福利片 | av在线一区二区 | 久一精品 | www.精品一区 | 久久国产精品一区 | 蜜桃在线视频 | 福利久久 | 97在线观视频免费观看 | 国产香蕉视频在线播放 | 性色视频| 久久大| 成年人黄色小视频 | 一级毛片免费完整视频 | 久久精品中文 | 日韩一级精品视频在线观看 | 亚洲天堂日韩精品 | 中文字幕在线视频网站 | 麻豆视频在线看 | 中文字幕成人av | 丁香久久 | 天堂网av在线 | 国产精品99久久久久 | 99久久婷婷国产综合精品电影 | 国产精品久久久久久久久久久免费看 | www.亚洲一区二区 | 美日韩一区二区 | 成人深夜福利 | а天堂中文最新一区二区三区 |