加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

django 如何获取用户的ip地址

发布时间:2020-12-15 17:14:25 所属栏目:大数据 来源:网络整理
导读:在实际django开发过程中,有时候需要记录用户的ip信息,那么在django中如何获取用户真实ip信息? 第一种方法:通过HTTP_X_FORWARDED_FOR和REMOTE_ADDR获取 代码如下: def?get_client_ip(request):????x_forwarded_for?=?request.META.get('HTTP_X_FORWARDED

在实际django开发过程中,有时候需要记录用户的ip信息,那么在django中如何获取用户真实ip信息?

第一种方法:通过HTTP_X_FORWARDED_FOR和REMOTE_ADDR获取

代码如下:

def?get_client_ip(request):
????x_forwarded_for?=?request.META.get('HTTP_X_FORWARDED_FOR')
????if?x_forwarded_for:
????????ip?=?x_forwarded_for.split(',')[0]
????else:
????????ip?=?request.META.get('REMOTE_ADDR')
????return?ip

print?get_client_ip(request)

>>>?http://www.chenxm.cc/article/865.html

注意:这个方法不是非常安全一种方法,对于非正常用户可以很轻松使用这个方法返回他们伪造的ip地址

参考:http://esd.io/blog/flask-apps-heroku-real-ip-spoofing.html

第二种方法:使用模块django-ipware

安装:

pip?install?django-ipware

简单实例:

?#?可以利用view和middleware中request对象

?from?ipware?import?get_client_ip
?client_ip,?is_routable?=?get_client_ip(request)
?if?client_ip?is?None:
????#?无法获取客户端的ip地址
?else:
?????#?获取到客户的ip
?????if?is_routable:
?????????#?客户端的ip地址是一个公开地址
?????else:
?????????#?客户端的ip地址是一个私有地址

?#?优先顺序是(公共,私有,环回,无)

高级用法:

自定义头部信息 - 用于查看ipware的自定义请求标头

i,?r?=?get_client_ip(request,?request_header_order=['X_FORWARDED_FOR'])
i,?request_header_order=['X_FORWARDED_FOR',?'REMOTE_ADDR'])

代理计数 -? Django服务器支持固定数量的代理

i,?proxy_count=1)

受信任的代理 -? Django服务器支持一个或多个已知和受信任的代理

i,?proxy_trusted_ips=('177.2.2.2'))

#?对于多个代理,只需将它们添加到列表中即可
i,?proxy_trusted_ips=('177.2.2.2',?'177.3.3.3'))

#?For?proxies?with?fixed?sub-domain?and?dynamic?IP?addresses,?use?partial?pattern
i,?proxy_trusted_ips=('177.2.',?'177.3.'))

参考:https://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读