环境:Trae IDE + Flask‑3.1.3,课程 3 大模块:两种配置加载对比、Flask 官方 CLI 完整讲解、完整实例演示。

课前准备(Trae IDE)

  1. 项目目录结构

 flask-demo/
 ├── app.py          # 主程序
 ├── config.py       # py文件配置
 ├── requirements.txt
 └── .flaskenv       # flask环境配置文件

第一部分:Flask 加载配置文件两种方法对比

重点:只有大写变量才会被 Flask 读取,小写直接忽略

方式 1:app.config.from_pyfile('config.py') 加载 py 配置文件

from_pyfile:直接读取一个.py配置文件执行,把里面大写变量读进 app.config。

config.py

 # config.py
 DEBUG = True
 SECRET_KEY = "demo-secret-123456"
 DATABASE_URI = "sqlite:///demo.db"
 PAGE_SIZE = 10

app.py 使用代码

 from flask import Flask
 ​
 app = Flask(__name__)
 # 加载配置文件
 app.config.from_pyfile("config.py")
 ​
 # 读取配置
 print("调试模式:", app.config["DEBUG"])
 print("密钥:", app.config["SECRET_KEY"])
 ​
 @app.route("/")
 def index():
     return f"SECRET_KEY:{app.config['SECRET_KEY']}"
 ​
 if __name__ == '__main__':
     app.run()

✅优点

  1. 文件独立,修改配置无需改动业务代码

  2. 文件内支持编写 Python 代码、条件判断逻辑

❌缺点

  1. 多环境切换实现繁琐,需要维护多份配置文件

  2. 密钥存在泄露风险,缺少原生环境区分能力

方式 2:app.config.from_object() 加载配置类 / 配置对象

from_object:加载类、模块对象,通过类继承实现多环境,是工程项目主流写法。

修改 config.py,写成类:

 # config.py
 class BaseConfig:
     """基础公共配置,所有环境继承"""
     SECRET_KEY = "demo-secret-123456"
     PAGE_SIZE = 10
 ​
 class DevConfig(BaseConfig):
     """开发环境"""
     DEBUG = True
     DATABASE_URI = "sqlite:///dev.db"
 ​
 class ProdConfig(BaseConfig):
     """生产环境"""
     DEBUG = False
     DATABASE_URI = "sqlite:///prod.db"

app.py 加载对象

 from flask import Flask
 import os
 ​
 app = Flask(__name__)
 ​
 # 从环境变量读取环境,默认开发
 env = os.environ.get("FLASK_ENV", "dev")
 if env == "prod":
     app.config.from_object("config.ProdConfig")
 else:
     app.config.from_object("config.DevConfig")
 ​
 print("DEBUG=", app.config["DEBUG"])
 ​
 @app.route("/")
 def index():
     return f"当前数据库:{app.config['DATABASE_URI']}"
 ​
 if __name__ == '__main__':
     app.run()

✅优点

  1. 使用类继承,多环境配置管理便捷,开发 / 生产环境一键切换

  2. 代码结构清晰,适配中大型项目

❌缺点

  1. 需要编写配置类,存在少量学习成本

两种方法对比表格

对比项 from_pyfile from_object
加载来源 直接加载 py 文件 加载 Python 类 / 模块对象
多环境支持 繁琐,需维护多个 py 文件 能力强,类继承一键切换
适用场景 小型项目、单环境部署 正式工程、多环境开发
写法 app.config.from_pyfile("config.py") app.config.from_object("config.DevConfig")
共同规则 只读取大写变量,小写全部忽略 只读取大写变量,小写全部忽略

💡提示:支持两种方式混用:先 from_object 加载基础类,再 from_pyfile 加载本地私有配置,后加载的配置会覆盖类配置。


第二部分:Flask 官方内置 CLI 完整功能及使用

Flask‑3.1.3 安装自带flask命令,底层基于 Click 库;不推荐使用python app.run()作为命令行启动方式,官方优先推荐 flask run。

Trae IDE 底部终端直接执行下面命令。

关键:告诉 CLI 你的 app 在哪里

两种方式:

  1. 创建.flaskenv文件(最简,Trae 可直接识别)

 # .flaskenv
 FLASK_APP=app.py
 FLASK_ENV=dev
  1. 命令行参数:flask --app app.py run

1. flask run:启动开发服务器

 # 默认启动 127.0.0.1:5000
 flask run
 ​
 # 开启调试模式(代码修改自动重启)
 flask run --debug
 ​
 # 允许外部访问,自定义端口
 flask run --host=0.0.0.0 --port=8080 --debug

⚠️注意:flask run为开发服务器,生产环境禁止使用!

2. flask routes:查看全部路由

快速输出项目全部接口与请求方法,用于路由排查

 flask routes

输出示例:

 Endpoint  Methods  Rule
 --------  -------  -----
 index     GET      /

3. flask shell:带 app 上下文交互式终端

可直接操作 app、数据库模型,用于片段代码测试,无需编写临时接口。

 flask shell

进入 shell 之后:

 # 已经自动导入app
 print(app.config["SECRET_KEY"])
 # 可以测试数据库、模型

4. 查看帮助

 # 查看全部内置命令
 flask --help
 ​
 # 看run子命令帮助
 flask run --help

完整内置命令清单

命令 作用
flask run 启动开发服务
flask routes 打印全部路由列表
flask shell 带应用上下文 Python 交互 shell
flask --app xxx 指定应用入口文件
--debug 开启调试模式

高频问题

  1. 执行flask run提示找不到 app:配置.flaskenv,或者使用--app app.py参数

  2. python app.py不会加载.flaskenv环境变量,与flask run行为存在差异

  3. --debug禁止在生产服务器开启,存在安全风险。


第三部分:Trae IDE 完整实例演示

演示项目:Demo 工程,同时覆盖两种配置加载方式,实操 flask CLI 命令。

完整项目文件,复制粘贴到 Trae 中即可运行。

文件 1 config.py

 # config.py
 class BaseConfig:
     SECRET_KEY = "demo-2026-flask"
     PAGE_SIZE = 20
 ​
 class DevConfig(BaseConfig):
     DEBUG = True
     DATABASE_URI = "sqlite:///dev_demo.db"
 ​
 class ProdConfig(BaseConfig):
     DEBUG = False
     DATABASE_URI = "sqlite:///prod_demo.db"
 ​
 # 独立pyfile配置,用于from_pyfile演示
 DEBUG_FILE = True
 SECRET_KEY_FILE = "from-pyfile-key"

文件 2 app.py

 from flask import Flask
 import os
 ​
 app = Flask(__name__)
 ​
 # =========切换两种加载方式,注释/取消注释测试=========
 # 方式1 from_object 对象加载(推荐)
 env_mode = os.environ.get("FLASK_ENV", "dev")
 if env_mode == "prod":
     app.config.from_object("config.ProdConfig")
 else:
     app.config.from_object("config.DevConfig")
 ​
 # 方式2 from_pyfile 文件加载,打开下面注释即可切换
 # app.config.from_pyfile("config.py")
 ​
 @app.route("/")
 def index():
     return {
         "DEBUG": app.config["DEBUG"],
         "SECRET_KEY": app.config["SECRET_KEY"],
         "DATABASE_URI": app.config["DATABASE_URI"]
     }
 ​
 @app.route("/hello")
 def hello():
     return "Hello Trae + Flask Demo"
 ​
 if __name__ == "__main__":
     app.run()

文件 3 .flaskenv

 FLASK_APP=app.py
 FLASK_ENV=dev

在 Trae IDE 实操步骤

  1. 创建上述 3 个文件并保存。

  2. Trae 打开底部终端。

 # 1.查看全部路由
 flask routes
 ​
 # 2.启动调试服务
 flask run --debug
  1. 浏览器打开 http://127.0.0.1:5000,返回 JSON,配置读取生效。

  2. 测试 shell

 flask shell
 >>> print(app.config["DEBUG"])

切换到生产环境测试

终端 Linux/Mac:

 export FLASK_ENV=prod
 flask run

Windows PowerShell:

 $env:FLASK_ENV="prod"
 flask run

访问页面,DEBUG 自动变成 False,数据库地址切换 prod.db。

切换 from_pyfile 模式

注释掉 from_object 代码,打开app.config.from_pyfile("config.py"),重新启动,观察读取到SECRET_KEY_FILE

如果问题未解决,可以联系bot提供远程调试服务,私信bot_mmnn回复‘调试’获取帮助。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐