flask无法访问console的问题解决 2024
# 探究
问题描述:
在虚拟机、容器等环境中开启的flask服务,除了开启服务的本地主机localhost/console
可以访问console
,其他主机可以正常访问已定义的路由,在访问console
时返回400
原因:
新版本flask
的核心组件Werkzeug
官方对于console
的访问做了安全配置,默认只允许localhost
访问console
Werkzeug
官方更新日志中可以找到答案,
在Werkzeug3.0.3
版本开始禁止其他主机访问console
了
两种解决方案
添加信任ip
Werkzeug
安装3.0.3前的版本,允许其他主机正常访问console
控制台
# 添加信任ip
看起来添加信任ip实现起来比较优雅,尝试一下
尝试失败了,感兴趣的师傅自行试一试这个方式,成功了踢我一下(求放过.gif)
# Werkzeug降级
默认安装的版本一般都是最新的了
其他组件默认即可,Werkzeug安装Werkzeug3.0.3
前的版本,也还可以实现直接允许其他用户访问console
控制台
注意
为避免其他可能在复现本环境的师傅主机环境,下面演示过程在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
2
3
4
5
6
7
8
9
10
11
启动服务
python3 app.py
1
访问console
就可以拿着pin码去玩耍了
退出虚拟环境
deactivate
1
编辑 (opens new window)
最后一次更新于: 2024/10/28, 00:07:03