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')
