关于精灵获取IP地址的问题

Question about getting an IP address in Genie

我是 Django 的新手,我从专家那里得到了这段代码,但我不知道它是如何工作的,也不知道谁能解释它是如何工作的?

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

我认为值得一提的是您的代码片段可能来自此 discussion。以防人们想阅读整个答案。

代码后跟解释:

def get_client_ip(request):

使用输入 request 启动函数 get_client_ip

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

HTTP_X_FORWARDED_FOR is a field of the HTTP request header 你存储在变量 x_forwarded_for.

if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]

变量 x_forwarded_for 是以逗号分隔的 IP 地址列表(示例如下)。

203.0.113.195, 70.41.3.18, 150.172.238.178

因为您只对第一个 IP 地址感兴趣,所以您用逗号 .split(',') 分隔此字符串,并且只取第一个 object [0].

else:
    ip = request.META.get('REMOTE_ADDR')

如果变量 x_forwarded_for 为空,那么您尝试通过从 REMOTE_ADDR 字段中获取数据来获取用户的 IP 地址42=]HTTP 请求 header 因为这是您的第二个最佳选择。

return ip

在函数的末尾,您想要 return IP 地址,以便您可以在您的应用程序中使用它。