flask无法访问console的问题解决 2024

# 探究

问题描述:

在虚拟机、容器等环境中开启的flask服务,除了开启服务的本地主机localhost/console可以访问console,其他主机可以正常访问已定义的路由,在访问console时返回400

0

原因:

新版本flask的核心组件Werkzeug官方对于console的访问做了安全配置,默认只允许localhost访问console

官方文档地址 (opens new window)

000

Werkzeug官方更新日志中可以找到答案,

Werkzeug3.0.3版本开始禁止其他主机访问console

qa

两种解决方案

  • 添加信任ip

  • Werkzeug安装3.0.3前的版本,允许其他主机正常访问console控制台

# 添加信任ip

看起来添加信任ip实现起来比较优雅,尝试一下

尝试失败了,感兴趣的师傅自行试一试这个方式,成功了踢我一下(求放过.gif)

# Werkzeug降级

默认安装的版本一般都是最新的了

00

0

其他组件默认即可,Werkzeug安装Werkzeug3.0.3前的版本,也还可以实现直接允许其他用户访问console控制台

1

注意

为避免其他可能在复现本环境的师傅主机环境,下面演示过程在venv虚拟环境中进行

安装 venv 模块

sudo apt install python3-venv
1

创建虚拟环境myflask

python3 -m venv myflask
1

激活虚拟环境

source myflask/bin/activate
1

安装环境

pip install Flask Werkzeug==3.0.2
1

示例app.py

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/', methods=['GET'])
def hello_world():
    name = request.args.get('name', 'world')
    return render_template_string(f"Hello, {name}!")

if __name__ == '__main__':
    app.run(debug=True, port=8080, host='0.0.0.0')
1
2
3
4
5
6
7
8
9
10
11

启动服务

python3 app.py
1

访问console就可以拿着pin码去玩耍了

3

2

退出虚拟环境

deactivate
1
最后一次更新于: 2024/10/28, 00:07:03