Django request.META包含的數據及獲取用戶訪問IP方法


request.META 是一個Python字典,包含了所有本次HTTP請求的Header信息,比如用戶IP地址和用戶Agent(通常是瀏覽器的名稱和版本號)。 注意,Header信息的完整列表取決於用戶所發送的Header信息和服務器端設置的Header信息。 

因為 request.META 是一個普通的Python字典,因此當你試圖訪問一個不存在的鍵時,會觸發一個KeyError異常。 (HTTP header信息是由用戶的瀏覽器所提交的、不應該給予信任的“額外”數據,因此你總是應該好好設計你的應用以便當一個特定的Header數據不存在時,給出一個優雅的回應。)你應該用 try/except 語句,或者用Python字典的 get() 方法來處理這些“可能不存在的鍵”。

我們可以寫一個函數來獲取所有的字典項:

def ergodic_meta(request):

    tuple_dict = request.META.items()  #將字典轉換成可遍歷的元組。

    tuple_dict.sort()   #對元組進行排序,方便查看。

    html = []

    for k, v in tuple_dict:

        html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))

    return HttpResponse('<table>%s</table>' % '\n'.join(html))

 

使用django來獲取用戶訪問的IP地址:

如果用戶是正常情況下其字典的KEY鍵名為‘’REMOTE_ADDR‘’:

request.META['REMOTE_ADDR']

但是有些網站服務器會使用ngix等代理http,或者是該網站做了負載均衡,導致使用remote_addr抓取到的是1270.0.1,這時使用HTTP_X_FORWARDED_FOR才獲得是用戶的真實IP。推薦使用以下代碼:

if 'HTTP_X_FORWARDED_FOR' in request.META: 
   ip
= request.META.get('HTTP_X_FORWARDED_FOR')
else:
   ip
= request.META.get('REMOTE_ADDR')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM