📅  最后修改于: 2023-12-03 15:23:08.382000             🧑  作者: Mango
在 Web 应用程序中,经常需要获取用户的 IP 地址,以便进行一些操作,例如记录日志、限制访问等等。本文将介绍在 Django 中获取用户的 IP 地址的方法。
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 官方推荐的第三方应用程序,用于识别客户端 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 库。