使用Flask获取访问者的IP地址

332 投票
12 回答
310858 浏览
提问于 2025-04-16 04:24

我正在制作一个网站,用户可以登录并下载文件,使用的是Flask微框架(基于Werkzeug),我用的是Python(我这边是2.6版本)。

我需要在用户登录时获取他们的IP地址(为了记录日志)。有没有人知道怎么做?肯定有办法用Python实现吧?

12 个回答

97

其实,你会发现,当你简单地获取以下内容时,就能得到服务器的地址:

request.remote_addr

如果你想要获取客户端的IP地址,那么可以使用以下内容:

request.environ['REMOTE_ADDR']
134

使用代理的时候可能会有点麻烦,所以如果你在用代理的话,记得看看ProxyFixFlask的文档。你可以查看一下你环境中的request.environ。在使用nginx的时候,我有时会这样做:

from flask import request   
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)   

当像nginx这样的代理转发地址时,它们通常会在请求的头信息中包含原始的IP地址。

更新 查看flask-security的实现。再次提醒,在实施之前,先查看关于ProxyFix的文档。你的解决方案可能会根据你具体的环境有所不同。

433

查看文档了解如何访问请求对象,接着从这个请求对象中获取一个叫 remote_addr 的属性。

代码示例

from flask import request
from flask import jsonify

@app.route("/get_my_ip", methods=["GET"])
def get_my_ip():
    return jsonify({'ip': request.remote_addr}), 200

想要了解更多信息,可以查看 Werkzeug 的文档

撰写回答