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

Python django框架應(yīng)用中實(shí)現(xiàn)獲取訪問者ip地址示例

 更新時(shí)間:2019年05月17日 11:45:19   作者:Lockeyi  
這篇文章主要介紹了Python django框架應(yīng)用中實(shí)現(xiàn)獲取訪問者ip地址,涉及Python Request模塊相關(guān)函數(shù)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python django框架應(yīng)用中實(shí)現(xiàn)獲取訪問者ip地址。分享給大家供大家參考,具體如下:

在django官方文檔中有一段對(duì)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 – The length of the request body (as a string).
•CONTENT_TYPE – The MIME type of the request body.
•HTTP_ACCEPT – Acceptable content types for the response.
•HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
•HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
•HTTP_HOST – The HTTP Host header sent by the client.
•HTTP_REFERER – The referring page, if any.
•HTTP_USER_AGENT – The client's user-agent string.
•QUERY_STRING – The query string, as a single (unparsed) string.
•REMOTE_ADDR – The IP address of the client.
•REMOTE_HOST – The hostname of the client.
•REMOTE_USER – The user authenticated by the Web server, if any.
•REQUEST_METHOD – A string such as "GET" or "POST".
•SERVER_NAME – The hostname of the server.
•SERVER_PORT – 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+.

然后我們來打印一下其中的條目進(jìn)行驗(yàn)證:

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會(huì)包含在上邊的鍵值對(duì)中,我們可以通過一下方式獲取ip:

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

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

結(jié)合上一篇的日志模塊,可以實(shí)現(xiàn)記錄登陸用戶的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

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

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例

    python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • django 實(shí)現(xiàn)手動(dòng)存儲(chǔ)文件到model的FileField

    django 實(shí)現(xiàn)手動(dòng)存儲(chǔ)文件到model的FileField

    這篇文章主要介紹了django 實(shí)現(xiàn)手動(dòng)存儲(chǔ)文件到model的FileField,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python使用Matplotlib模塊的pie()函數(shù)實(shí)現(xiàn)繪制餅形圖

    Python使用Matplotlib模塊的pie()函數(shù)實(shí)現(xiàn)繪制餅形圖

    這篇文章主要為大家詳細(xì)介紹了 Python 如何使用 Matplotlib 模塊的pie()函數(shù)繪制餅形圖,文中有詳細(xì)的代碼講解,對(duì)大家學(xué)習(xí)或工作有一定的幫助,感興趣的可以了解一下
    2023-11-11
  • Python?Numpy庫(kù)的超詳細(xì)教程

    Python?Numpy庫(kù)的超詳細(xì)教程

    Numpy庫(kù)是Python中的一個(gè)科學(xué)計(jì)算庫(kù),本文主要介紹了ndarray的基本操作、?ndarray運(yùn)算等各種Numpy庫(kù)的超詳細(xì)教程,需要的朋友可以參考下
    2022-04-04
  • Pandas數(shù)據(jù)清洗的維度詳解

    Pandas數(shù)據(jù)清洗的維度詳解

    數(shù)據(jù)清洗是數(shù)據(jù)分析的基礎(chǔ),關(guān)鍵于提高數(shù)據(jù)質(zhì)量和保證分析準(zhǔn)確性。通過數(shù)據(jù)清洗,可以減少錯(cuò)誤、增加數(shù)據(jù)可用性、保護(hù)隱私。Pandas提供多種方法處理缺失值和重復(fù)值,還有多種方式識(shí)別和處理異常值。掌握這些技巧對(duì)提升數(shù)據(jù)處理能力極為重要
    2024-09-09
  • Windows下為Python安裝Matplotlib模塊

    Windows下為Python安裝Matplotlib模塊

    這篇文章主要介紹了如何在Windows下為Python安裝Matplotlib模塊的方法,非常的詳細(xì),而且附上了官方的下載地址,小伙伴們操作起來應(yīng)該毫無(wú)壓力了。
    2015-11-11
  • Python2.7版os.path.isdir中文路徑返回false的解決方法

    Python2.7版os.path.isdir中文路徑返回false的解決方法

    這篇文章主要為大家詳細(xì)介紹了Python2.7版os.path.isdir中文路徑返回false的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python實(shí)現(xiàn) 獲取b站主播直播間 粉絲牌信息的方法

    python實(shí)現(xiàn) 獲取b站主播直播間 粉絲牌信息的方法

    這篇文章主要介紹了python實(shí)現(xiàn) 獲取b站主播直播間粉絲牌信息 ,用于實(shí)現(xiàn)通過牌子逆向查主播信息這個(gè)功能,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python 點(diǎn)集排序之帶索引的Z字形排序算法實(shí)現(xiàn)代碼

    Python 點(diǎn)集排序之帶索引的Z字形排序算法實(shí)現(xiàn)代碼

    這篇文章介紹了如何使用Python在Grasshopper中實(shí)現(xiàn)點(diǎn)集排序功能,包括點(diǎn)的Y坐標(biāo)分組和X坐標(biāo)排序,以及追蹤每個(gè)點(diǎn)的原始索引位置,通過創(chuàng)建點(diǎn)索引對(duì)、分組邏輯和排序,實(shí)現(xiàn)了Z字形排序算法,感興趣的朋友一起看看吧
    2025-01-01
  • Python字符串拼接、截取及替換方法總結(jié)分析

    Python字符串拼接、截取及替換方法總結(jié)分析

    這篇文章主要介紹了Python字符串拼接、截取及替換方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)字符串的拼接、截取與替換的原理與常見使用技巧,需要的朋友可以參考下
    2016-04-04

最新評(píng)論

酒泉市| 建水县| 湛江市| 涞源县| 高碑店市| 陆川县| 沙雅县| 九龙坡区| 仁寿县| 荣成市| 商都县| 鄂温| 天镇县| 唐山市| 涿鹿县| 南木林县| 时尚| 巴南区| 金山区| 沙河市| 青神县| 新绛县| 双牌县| 分宜县| 牟定县| 秦皇岛市| 辰溪县| 莎车县| 闽侯县| 凯里市| 武川县| 仙居县| 左贡县| 安远县| 辰溪县| 同仁县| 新巴尔虎左旗| 晋中市| 铁力市| 贵阳市| 普兰县|