【Python】详解 Flask 中开发与生产环境配置的分离策略

详解 Flask 中开发与生产环境配置的分离策略

在企业级后端接口项目中,为了满足不同环境(开发和生产)的需求,我们通常需要区分不同的配置。本指南将详细介绍如何在 Flask 应用中实现这一区分。

一、配置文件

我们创建了两个配置文件:config_dev.py 和 config_prod.py 。

config_dev.py

python 复制代码
class ConfigDev:
    DEBUG = True
    DB_HOST = 'localhost'
    DB_USER = 'dev_user'
    DB_PASSWORD = 'dev_password'
    DB_NAME = 'dev_database'
    PORT = 5000  # 开发环境的端口

在开发配置中,我们通常开启调试模式(DEBUG = True),使用本地数据库连接信息,并设置开发环境常用的端口。

config_prod.py

python 复制代码
class ConfigProd:
    DEBUG = False
    DB_HOST = 'prod_host'
    DB_USER = 'prod_user'
    DB_PASSWORD = 'prod_password'
    DB_NAME = 'prod_database'
    PORT = 80  # 生产环境的端口

生产配置则关闭调试模式,使用生产环境的数据库连接信息,并设置适合生产环境的端口。

二、在应用中选择配置

在 app.py 文件中,我们根据环境变量来选择加载相应的配置。

python 复制代码
from flask import Flask
import os

# 根据环境变量选择配置
if os.environ.get('ENV') == 'PROD':
    from config_prod import ConfigProd as Config
else:
    from config_dev import ConfigDev as Config

app = Flask(__name__)
app.config.from_object(Config)

if __name__ == '__main__':
    app.run(port=app.config['PORT'])

在本地开发时,您无需设置环境变量 ENV ,应用将默认使用开发配置。而在部署到生产环境时,设置环境变量 ENV 为 PROD ,应用将加载生产配置。

三、使用 current_app._get_current_object()

在某些情况下,您可能需要在脱离 Flask 应用上下文的函数中获取当前应用的配置。这时可以使用 current_app._get_current_object() ,但要注意必须在应用上下文内调用。示例如下:

python 复制代码
from flask import current_app

def get_database_info():
    app = current_app._get_current_object()
    db_host = app.config['DB_HOST']
    db_user = app.config['DB_USER']
    # 其他配置项的获取
    return f"数据库主机: {db_host}, 用户: {db_user}"

# 调用示例
with app.app_context():
    print(get_database_info())
相关推荐
宿州派大星1 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
承渊政道2 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
AIgorithmGEEK7 小时前
MySQL 索引全解(下):建、查、删实战与知识速查表
数据库·mysql·b+树·索引
Smoothcloud润云9 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook9 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
唠点键盘之外的9 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
云和恩墨9 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环
数据库
ly76899 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
数据库·mongodb·事务·分片集群·快照隔离·写冲突
棉猴9 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
豆角焖肉9 小时前
Spring AOP 自定义注解实现系统操作日志
数据库·自定义注解·springaop·操作日志·aop 切面