📜  获取用户 ip 地址 django - Python (1)

📅  最后修改于: 2023-12-03 15:27:51.238000             🧑  作者: Mango

获取用户 IP 地址 Django - Python

在 Web 应用程序中,有时需要获取用户的 IP 地址以进行一些操作,如记录日志、防范恶意攻击等。本文将介绍如何在 Django 中获取用户的 IP 地址。

方法一:使用 request.META

Django 请求对象(request)有一个属性叫做 META,里面包含了很多关于请求的元信息。其中,REMOTE_ADDR 用于存储用户 IP 地址。

def some_view(request):
    # 获取用户 IP 地址
    user_ip = request.META.get('REMOTE_ADDR')
    # 处理用户请求
    ...

需要注意的是,REMOTE_ADDR 仅仅是记录了这条 HTTP 请求最先从哪个客户机(或代理)发出,如果中间有多个代理,那么 REMOTE_ADDR 只会获取到最后一个代理的 IP 地址。如果要获取最终用户的真实 IP 地址,需要考虑 X-Forwarded-For 请求头,或者使用下面介绍的方法二。

方法二:使用 django-ipware 库

django-ipware 是一个可以方便地获取用户真实 IP 地址的 Python 库,其可以自动处理 REMOTE_ADDR 以及 X-Forwarded-For 请求头,并且可以识别 IPv4 和 IPv6 地址。

安装 django-ipware
pip install django-ipware
在 Django 项目中使用 django-ipware
from ipware import get_client_ip

def some_view(request):
    # 获取用户真实 IP 地址
    client_ip, is_routable = get_client_ip(request)
    # 处理用户请求
    ...

get_client_ip() 函数返回一个元组,第一个元素是用户的 IP 地址,第二个元素是一个布尔值,用于指示该 IP 地址是否可以直接路由到互联网。需要注意的是,为了识别 X-Forwarded-For 请求头,django-ipware 还需要在 Django 项目的设置文件中配置相应的参数。

更多关于 django-ipware 的信息可以参考其官方文档

结语

本文介绍了两种获取用户 IP 地址的方法,第一种方法使用 Django 请求对象的 META 属性,并且需要自己处理 X-Forwarded-For 请求头;第二种方法则使用了 django-ipware 库,可以自动处理 REMOTE_ADDR 和 X-Forwarded-For 请求头,并且支持 IPv6 地址。使用哪种方法取决于具体情况,但无论如何,获取用户 IP 地址始终都是 Web 开发中常见的任务之一。