Django学习笔记—获取正确的客户端IP地址

获取客户端ip地址防止恶意刷点击 为什么要获取用户ip地址 当我们写好一个app,为了防止某些用户为了活跃,刷收藏和点击率,但又为了避免不同用户用同一个机器进行登录,这时我们就需要获取客户端IP地址。 #判断ip地址是否在HTTP_X_FORWARDED_FOR里面 if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META.get('HTTP_X_FOR... 阅读详情

原文地址: http://newliu.com/post/12/


在使用了comments库为网站添加评论系统后,我发现一个奇怪的现象:在admin后台看到的评论者IP地址居然全部都是127.0.0.1,这明显不是真正的客户端IP地址。我去查看了一下comments的源代码,获取客户IP地址的一句代码在Python27\Lib\site-packages\django\contrib\comments\views文件里,即:

?
1
comment.ip_address = request.META.get( "REMOTE_ADDR" , None )

感觉没有任何问题啊,左思右想得不到要领。这个问题曾困扰过我一段时间,直到有一天我终于把之前看《TheDjangoBook》时跳过的“中间件”一章看了一遍,才搞懂了原委。这事给我的教训就是看书真不能偷懒。下面把这个问题的解决方法记录一下吧。

thedjangobook里对此问题的解释就是:高流量的站点通常需要将Django部署在负载平衡proxy(参见第20章)之后。这种方式将带来一些复杂性,其一就是每个request中的远程IP地址(request.META["REMOTE_IP"])将指向该负载平衡proxy,而不是发起这个request的实际IP。负载平衡proxy处理这个问题的方法在特殊的 X-Forwarded-For 中设置实际发起请求的IP。 因此,需要一个中间件来确保运行在proxy之后的站点也能在request.META['REMOTE_ADDR']中得到正确的IP。

解决办法就是:在settings.py中需要添加如下这个中间件(即middleware):

?
1
'django.middleware.http.SetRemoteAddrFromForwardedFor' ,

需要注意的是:Djangobook上说SetRemoteAddrFromForwardedFor这个类已经被内置在Django当中了,而事实情况是很多Django版本里它又被移除了,故你需要自己将这个类补进去。

所以现在我们需要将这个类写入Django源代码当中,文件路径为Lib\site-packages\django\middleware\http.py,具体代码为:

?
1
2
3
4
5
6
7
8
9
10
11
class SetRemoteAddrFromForwardedFor( object ):
def process_request( self , request):
    try :
        real_ip = request.META[ 'HTTP_X_FORWARDED_FOR' ]
    except KeyError:
        pass
    else :
        # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
        # Take just the first one.
        real_ip = real_ip.split( "," )[ 0 ]
        request.META[ 'REMOTE_ADDR' ] = real_ip

当然,我们也可以不用在Django源代码上修改,直接在自己的项目中加上这个类也可以。比如在your_project目录下新建文件http.py,然后将上述代码添加进去,再在settings.py文件中这样引用一下即可:

?
1
‘your_project.http.SetRemoteAddrFromForwardedFor’,

经过这个操作,你的Django项目就可以正确的获取客户端的IP地址了。 

Python Django 搭建纯净IP地址返回服务(返回访问者IP地址) 环境: centos 7.5 python 3.6.1 nginx 1.16.1 uwsgi 2.0.18 django 2.2.7 环境配置就不细说了,教程很多,也可看我之前写的一篇环境搭建流程 https://blog.youkuaiyun.com/qq_38154948/article/details/103504154 Django获取客户端IP # /Django_web/ip/ip.py fr... 阅读详情

相关推荐

Python django框架应用中实现获取访问者ip地址示例

主要介绍了Python django框架应用中实现获取访问者ip地址,涉及Python Request模块相关函数使用技巧,需要的朋友可以参考下

DJANGO获取用户访问IP

使用django来获取用户访问的IP地址,如果用户是正常情况下 request.META['REMOTE_ADDR'] 可以获得用户的IP地址。但是有些网站服务器会使用ngix等代理http,或者是该网站做了负载均衡,导致使用remote_addr抓取到的是1270.0.1,这时使用HTTP_X_FORWARDED_FOR才获得是用户的真实IP。推荐使用以下代码: if re

bravezhe的专栏 4万+

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

django中获取用户的ip地址

user_ip = request.META.get('REMOTE_ADDR')

python_web全栈 5982

3D点云修复实战:用PCN网络快速补全缺失的激光雷达数据(附代码)

本文详细介绍了PCN(Point Completion Network)网络在3D点云修复领域的实战应用。针对激光雷达数据常见的缺失问题,PCN通过端到端的深度学习架构,直接处理原始点云,实现由粗到精的快速补全。文章深入解析了其核心思想与编码器-解码器架构,并提供了完整的环境搭建、数据准备、模型实现、训练评估及在真实场景下的优化策略与代码示例,为自动驾驶、机器人等领域的开发者提供了高效的数据修复解决方案。

weixin_29041195的博客 392

SAP-QM-质检操作

SAP-QM-质检操作

yanzibing99的博客 8179

Django request.META(获取用户ip)

Django request.META(获取用户ip) request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。 注意,Header信息的完整列表取决于用户所发送的Header信息和服务器端设置的Header信息。 因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。 (HTTP header信息是由用户的浏览器所提交的、不应该给

西京刀客 5806

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1176

python+django 设置web项目运行的域名为本机ip,实现项目共享

一般情况下 ,项目运行的ip是 runserver 0.0.0.0:8000,但是此ip只支持在本地运行,无法再其他机器上运行 一、改配置 通过修改域名,支持项目可以在多台机器中运行,步骤: 1)修改运行ip,点击run---Edit Configurations---Parameters--runserver 本机IP:8000----apply---OK 2)修改setting...

XTY00的博客 2663

uniapp - 实现移动端H5微信公众号网页内置浏览器中预览和下载word文档(doc)、excel表格(xls)、ppt文稿、pdf文档等文件,微信内部打开预览和下载到本地详教程,兼容安卓苹果手机

uni-app,微信公众号,h5,移动端,web平台端,网页,网站,Uniapp微信公众号H5网站,内置浏览器下载文档,如何在微信浏览器中预览office文件,word文档,excel文档,pdf文档,ppt文档,office,微信内置浏览器下载文件,下载文件,在微信浏览器里面实现下载任意文件,H5需要在微信浏览器中下载excel文件,UniApp实现网页在微信内置浏览器中下载文件详细教程,安卓点击下载会提示打开浏览器,后端返回流文件,如何解决无法下载文件,跳转至浏览器下载文件,发送到电脑微信,安卓,苹果,

🏆 前端领域优质创作者 1万+

【电源专题】案例:对比不同电池在不同电流下的电池放电曲线

无

一点硬件 2840

django 获取访问者外网ip地址

文章目录ip#0 GitHub#1 环境#2 需求#3 获取本地ip#4 获取访问者ip#4.1 注意 ip #0 GitHub https://github.com/Coxhuang/django-ip.git #1 环境 python3.6 Django==2.0.7 #2 需求 获取本地ip 获取访问者ip #3 获取本地ip from django.shortcuts import...

Auto 1822

prplOS适配USB LAN网卡

本文介绍了将USB LAN网卡(如rndis0)适配到prplOS的LAN管理流程。

四儿家的小祖宗的博客 322

005-python django获取客户端 IP

文章目录python django获取客户端 IP python django获取客户端 IP def index(request): try: # 如果服务器采用 nginx + fastcgi 实现,在nginx的fastcgi配置中加入如下: # fastcgi_param REMOTE_ADDR $remote_addr; cline...

sone 的博客 613

Python办公自动化 2.1开发环境搭建:PyCharm社区版配置Anaconda开发环境

本篇文章主要讲述了如何在windows主机上配置 PyCharm + Anaconda开发环境、以及了如何配置 PyQt界面开发环境,安装过程超级详细,初学者可以照着一步一步来!

超级大洋葱的博客 2584

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Django Nginx反代 获取真实ip

非反代情况下Django 中 ip =request.META['REMOTE_ADDR'] 即可拿到对应ip地址 Nginx、fcgi、uwsgi等反代情况下 vi /etc/nginx/conf.d/xxx.conf 加入下面几行 location / { proxy_pass http://127.0.0.1:8080; proxy_redire...

Ch3nnn的博客 1315

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

服务器上django项目获取客户端真实ip地址

在云服务器上,由nginx代理转发后获取客户端ip地址的方法 client_ip=request.META['HTTP_X_FORWARDED_FOR'] nginx 部分匹配配置 location / { proxy_pass http://127.0.0.1:8080; #让后端的django知道最前面的客户机的信息(请求的url和i...

tiger075的博客 1990

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Django 获取真实ip地址

【代码】Django 获取真实ip地址。 request_data = {} if request.environ.get("HTTP_X_REAL_IP", False): # 从环境信息获取 request_data['ip'] = request.environ.get("HTTP_X_REAL_IP", None) elif request.headers.get("X-Real-Ip", False): # 从头部信息获取 request_data['ip'] =

weixin_62969297的博客 2612

Django 如何获取真实远程客户端IP

问题简述 我们知道HttpRequest.META字典包含所有HTTP头部信息(可用的头部信息取决于客户端和服务器)。一般情况下,HttpRequest.META.get('REMOTE_ADDR')一句代码就能获取到你想要的客户端IP。然而,如果部署了代理服务器等原因,就会导致得到的IP并不是真实的客户端IP。那么如何才能获取到真实的远程客户端IP呢? 解决方法参考 1.自定义中...

diwudong1059的博客 508

Django:获取客户端IP方法

Python Web开发,Django开发,技巧分享

OMG二黑的博客 3388

django获取客户端ip与端口port

【代码】django获取客户端ip与端口port。

221

解决使用django获取ip失败

项目场景: 在使用django获取客户端真实ip 问题描述: 使用如下的代码在获取用户ip,客户端ip为 172 网段,但是代码获取到的为10 网段。 def get_ip_address(request): """ 获取ip地址 :param request: :return: """ ip = request.META.get("HTTP_X_FORWARDED_FOR", "") if not ip: ip = requ

weixin_42825774的博客 462

python django 获取用户IP地址的方法

函数实现:  if 'HTTP_X_FORWARDED_FOR' in request.META: client_ip = request.META['HTTP_X_FORWARDED_FOR'] client_ip = client_ip.split(",")[0] else: client_ip = request.META['REMOTE_ADDR']

Scape1989的专栏 5198
上一篇: python 格式化json打印
下一篇: django启动
whackw
博客等级 码龄16年 203粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值