02_Trae环境中flask加载配置文件完整项目
环境:Trae IDE + Flask‑3.1.3,课程 3 大模块:两种配置加载对比、Flask 官方 CLI 完整讲解、完整实例演示。
课前准备(Trae IDE)
-
项目目录结构
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()
✅优点
-
文件独立,修改配置无需改动业务代码
-
文件内支持编写 Python 代码、条件判断逻辑
❌缺点
-
多环境切换实现繁琐,需要维护多份配置文件
-
密钥存在泄露风险,缺少原生环境区分能力
方式 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()
✅优点
-
使用类继承,多环境配置管理便捷,开发 / 生产环境一键切换
-
代码结构清晰,适配中大型项目
❌缺点
-
需要编写配置类,存在少量学习成本
两种方法对比表格
| 对比项 | 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 在哪里
两种方式:
-
创建
.flaskenv文件(最简,Trae 可直接识别)
# .flaskenv FLASK_APP=app.py FLASK_ENV=dev
-
命令行参数:
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 |
开启调试模式 |
高频问题
-
执行
flask run提示找不到 app:配置.flaskenv,或者使用--app app.py参数 -
python app.py不会加载.flaskenv环境变量,与flask run行为存在差异 -
--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 实操步骤
-
创建上述 3 个文件并保存。
-
Trae 打开底部终端。
# 1.查看全部路由 flask routes # 2.启动调试服务 flask run --debug
-
浏览器打开 http://127.0.0.1:5000,返回 JSON,配置读取生效。
-
测试 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回复‘调试’获取帮助。
更多推荐



所有评论(0)