欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python django框架應用中實現獲取訪問者ip地址示例

系統 2160 0

本文實例講述了Python django框架應用中實現獲取訪問者ip地址。分享給大家供大家參考,具體如下:

在django官方文檔中有一段對request.META的解釋:

HttpRequest.META
A standard Python dictionary containing all available HTTP headers. Available headers depend on the client
and server, but here are some examples:
?CONTENT_LENGTH ?C The length of the request body (as a string).
?CONTENT_TYPE ?C The MIME type of the request body.
?HTTP_ACCEPT ?C Acceptable content types for the response.
?HTTP_ACCEPT_ENCODING ?C Acceptable encodings for the response.
?HTTP_ACCEPT_LANGUAGE ?C Acceptable languages for the response.
?HTTP_HOST ?C The HTTP Host header sent by the client.
?HTTP_REFERER ?C The referring page, if any.
?HTTP_USER_AGENT ?C The client's user-agent string.
?QUERY_STRING ?C The query string, as a single (unparsed) string.
?REMOTE_ADDR ?C The IP address of the client.
?REMOTE_HOST ?C The hostname of the client.
?REMOTE_USER ?C The user authenticated by the Web server, if any.
?REQUEST_METHOD ?C A string such as "GET" or "POST".
?SERVER_NAME ?C The hostname of the server.
?SERVER_PORT ?C The port of the server (as a string).
With the exception of CONTENT_LENGTH and CONTENT_TYPE, as given above, any HTTP headers in the
request are converted to META keys by converting all characters to uppercase, replacing any hyphens with
underscores and adding an HTTP_ prefix to the name. So, for example, a header called X-Bender would be
mapped to the META key HTTP_X_BENDER.
Note that runserver strips all headers with underscores in the name, so you won't see them in META. This
prevents header-spoofing based on ambiguity between underscores and dashes both being normalizing to under-
scores in WSGI environment variables. It matches the behavior of Web servers like Nginx and Apache 2.4+.

然后我們來打印一下其中的條目進行驗證:

            
request_meta = request.META
info = []
for k, v in request_meta.items():
info.append(k)
print info
>>>
['wsgi.version', 'RUN_MAIN', 'HTTP_REFERER', 'HTTP_HOST', 'SERVER_PROTOCOL', 'SERVER_SOFTWARE', 'SCRIPT_NAME', 'LESSOPEN', 'SSH_CLIENT', 'REQUEST_METHOD', 'LOGNAME', 'USER', 'HOME', 'QUERY_STRING', 'PATH', 'MYSQL_DATABASE_URI', 'wsgi.errors', 'TERADATA_JACKAL_URI', 'LANG', 'TERM', 'SHELL', 'TZ', 'HTTP_COOKIE', 'J2REDIR', 'REMOTE_ADDR', 'SHLVL', 'wsgi.url_scheme', 'HTTP_VIA', 'SERVER_PORT', 'wsgi.file_wrapper', 'JAVA_HOME', 'CONTENT_LENGTH', 'HTTP_CONNECTION', 'XDG_RUNTIME_DIR', 'TERADATA_PASSWORD', 'PYTHONPATH', 'COMP_WORDBREAKS', 'VIRTUAL_ENV', u'CSRF_COOKIE', 'J2SDKDIR', 'wsgi.input', 'HTTP_USER_AGENT', 'PS1', 'wsgi.multithread', 'HTTP_UPGRADE_INSECURE_REQUESTS', 'HTTP_CACHE_CONTROL', 'XDG_SESSION_ID', '_', 'HTTP_ACCEPT', 'DERBY_HOME', 'SSH_CONNECTION', 'LESSCLOSE', 'SERVER_NAME', 'GATEWAY_INTERFACE', 'HTTP_X_FORWARDED_FOR', 'SSH_TTY', 'OLDPWD', 'wsgi.multiprocess', 'HTTP_ACCEPT_LANGUAGE', 'wsgi.run_once', 'PWD', 'DJANGO_SETTINGS_MODULE', 'CONTENT_TYPE', 'TERADATA_SIMBA_URI', 'MAIL', 'LS_COLORS', 'REMOTE_HOST', 'HTTP_ACCEPT_ENCODING', 'PATH_INFO']


          

通常訪問者的ip會包含在上邊的鍵值對中,我們可以通過一下方式獲取ip:

通常訪問者的IP就在其中,所以我們可以用下列方法獲取用戶的真實IP:

            
#X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負載均衡服務器時才會添加該項。
def get_ip(request):
 x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
 if x_forwarded_for:
  ip = x_forwarded_for.split(',')[0]#所以這里是真實的ip
 else:
  ip = request.META.get('REMOTE_ADDR')#這里獲得代理ip
 return ip


          

結合上一篇的日志模塊,可以實現記錄登陸用戶的ip信息:

            
remote_info = ''
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
 remote_info = 'HTTP_X_FORWARDED_FOR:' + x_forwarded_for.split(',')[0]
remote_addr = request.META.get('REMOTE_ADDR')
if remote_addr:
 remote_info += ' REMOTE_ADDR:' + remote_addr
if pass_auth:
 user.last_login_at = timezone.now()
 try:
  user.save()
 except Exception, msg:
  return JsonResponse({'result': 'Error', 'message': str(msg)})
 request.session['user_id'] = user_id
 request.session.set_expiry(9000)
 logger.info('[Success] '+ user_id+' has logged in! '+remote_info)
 return JsonResponse({'result': 'Success', 'message': 'Login successfully.'})
else:
 logger.warning('[Failed] '+ user_id + ' failed to login! '+remote_info)
 return JsonResponse({'result': 'Error', 'message': 'Username or Password is incorrect.'})


          

PS:這里再為大家推薦一款功能相似的在線工具供大家參考:

IP地址歸屬地在線查詢工具:
http://tools.jb51.net/aideddesign/ipcha

另外,本站在線工具小程序上也有一款功能更加強大的IP地址解析工具,感興趣的朋友可以掃描如下小程序碼查看:

Python django框架應用中實現獲取訪問者ip地址示例_第1張圖片

希望本文所述對大家基于Django框架的Python程序設計有所幫助。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级毛片在线看视频 | 久久精品免费观看 | 欧美一级成人免费大片 | 久久精品一区二区 | 香蕉一区二区 | 亚洲一区二区福利视频 | 操一操 | 国产浮力第一浮力 | 三级av | 日韩在线1 | 澳门特级 片免费观看视频 久草最新在线 | 色婷婷综合久久久久中文一区二区 | 欧美精彩视频在线观看 | 激情五月色婷婷 | 99热久久这里只有精品首页 | 天天干夜夜笙歌 | 91欧美精品激情在线观看 | 99热成人在线 | 色综合99天天亚洲 | 天天爱天天做天天干 | 欧美二区三区 | 日本三级2018亚洲视频 | 成人免费在线视频网站 | 久久午夜影院 | 三级日韩 | www.youjizz.com久久 | 亚洲婷婷综合网 | 日韩你懂得 | 91se在线看片国产免费观看 | 奇米影视7777久久精品人人爽 | 中文字幕 在线观看 | 三级中文字幕 | 日本久久精品视频 | 日本欧美一二三区色视频 | 色站网 | 国产日本欧美在线观看 | 免费中日高清无专码有限公司 | 91精品网 | 四虎4hutv永久在线影院 | 男女作爱免费网站 | 久久午夜精品 |