Flask项目中flask run与python3 app.py端口不一致及CORS问题求助
Flask CLI启动端口与CORS问题解决方案
一、解决flask run使用默认5000端口的问题
代码中if __name__ == "__main__"块里的app.run(port=8000)仅对python3 app.py启动方式生效,flask run通过Flask CLI启动时不会读取该块内的配置,因此仍使用默认5000端口。以下是三种解决方式:
- 方法1:环境变量配置
在.env文件中添加端口配置:
启动前确保加载FLASK_RUN_PORT=8000.env(如执行source .env或使用python-dotenv包),flask run会自动读取该端口。 - 方法2:启动命令指定端口
直接在命令行指定端口启动:flask run --port 8000 - 方法3:代码全局配置端口
在创建Flask实例后添加全局端口配置,两种启动方式都会生效:
注意:此方式会固定域名和端口,灵活访问场景下需谨慎使用。app = Flask(__name__) app.config['SERVER_NAME'] = 'localhost:8000'
二、解决flask run时的CORS错误
该问题仅在flask run时出现,大概率是Flask调试模式的自动重载器导致CORS配置在子进程中未正确生效,可尝试以下方案:
- 方案1:禁用重载器启动
启动时添加--no-reload参数,避免子进程重载影响CORS配置:flask run --port 8000 --no-reload - 方案2:为蓝图单独配置CORS
给注册的display_bp蓝图单独添加CORS配置,确保蓝图路由的跨域规则生效:from flask_cors import CORS # ... 其他代码 ... app.register_blueprint(display_bp) # 为蓝图配置CORS CORS(display_bp, resources={r"/*": {"origins": "*"}}, supports_credentials=True) - 方案3:调整CORS初始化顺序
先完成所有蓝图注册,再初始化CORS,确保全局规则覆盖所有路由:app = Flask(__name__) app.config.from_object(__name__) # 先注册蓝图 app.register_blueprint(display_bp) # 后初始化CORS CORS(app, resources={r"/*": {"origins": "*"}}, supports_credentials=True) - 方案4:验证调试模式影响
临时修改.env中的FLASK_DEBUG=False,关闭调试模式后启动验证,确认是否为调试重载器导致的问题。
内容的提问来源于stack exchange,提问作者Lara-Codes
相关产品推荐
相关产品推荐

