📜  在 django 中获取 IP 地址 - Python (1)

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

在 Django 中获取 IP 地址

在 Web 应用程序中,经常需要获取用户的 IP 地址,以便进行一些操作,例如记录日志、限制访问等等。本文将介绍在 Django 中获取用户的 IP 地址的方法。

使用 HttpRequest.META

HttpRequest 对象的 META 属性中包含了许多与请求相关的信息,其中就包括用户的 IP 地址。具体来说,可以通过 HttpRequest.META['REMOTE_ADDR'] 获取用户的 IP 地址。

def my_view(request):
    ip_address = request.META['REMOTE_ADDR']
    # do something with ip_address
    ...

请注意,该方法只能获取用户的直接连接 IP 地址,如果用户使用代理服务器连接,则获取到的 IP 地址为代理服务器的 IP 地址,而不是用户的真实 IP 地址。

使用 django-ipware

django-ipware 是一个 Django 官方推荐的第三方应用程序,用于识别客户端 IP 地址和代理服务器 IP 地址。该应用程序解决了使用 HttpRequest.META['REMOTE_ADDR'] 只能获取直接连接 IP 地址的问题。

安装

可以使用 pip 安装 django-ipware:

pip install django-ipware
使用
from ipware import get_client_ip

def my_view(request):
    client_ip, is_routable = get_client_ip(request)
    if client_ip is None:
        # Unable to get the client's IP address
        ...
    else:
        # Got client's IP address
        if is_routable:
            # client_ip is publicly routable on the Internet
            ...
        else:
            # client_ip is private/internal
            ...

get_client_ip 函数返回一个元组 (client_ip, is_routable),其中 client_ip 表示客户端 IP 地址,is_routable 表示该 IP 地址是否可以路由到互联网。

结论

在 Django 中获取 IP 地址有两种常用方式:使用 HttpRequest.META['REMOTE_ADDR'] 或使用 django-ipware 库。如果需要获取用户的真实 IP 地址,并且用户可能使用代理服务器连接,则建议使用 django-ipware 库。