配置文件相关使用介绍
- 一、相关介绍
- 二、系统环境变量配置
- 三、项目中用到的配置项
- 3.1、直接写在主脚本里
- 3.1、单独写在一个配置文件里
- 四、使用配置文件
一、相关介绍
一般来说,在执行flask run命令运行程序前,我们需要提供程序实例所在模块的位置 。
Flask会自动探测程序实例,自动探测存在下面这些规则:
- 从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例
- 从环境变量FLASK_APP对应的值寻找名为app或application的程序实例
如果你程序主模块命名为app.py,flask run命令会自动在其中寻找程序实例。如果你的程序主模块名是其他名称,
比如hello.py,那么需要设置环境变量FLASK_APP,将包含程序实例的模块名赋值给这个变量。
所以上一篇:项目文件布局使用Flask()方法时,传递了project
参数;
Flask的自动发现程序实例机制还有第三条规则:如果安装了python-dotenv,那么在使用flask run或其它命令时
会使用它自动从.flaskenv文件和.env文件中加载环境变量。
当安装了python-dotenv时,Flask在加载环境变量的优先级是:手动设置的环境变量>.env中设置的环境变>.flaskenv设置的环境变量。
二、系统环境变量配置
对于不适合写在程序里的配置,比如密码等,需要把配置写入系统环境变量,然后使用os模块的getenv()方法获取,第二个参数作为默认值
set MAIL_USERNAME=me@greyli.com # windows
export MAIL_USERNAME=me@greyli.com # *unix
import os
from flask import Flaskapp = Flask(__name__)
app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', 'me@greyli.com')
os.getenv()是Python中的一个函数,用于获取系统环境变量的值。它可以获取指定环境变量的值,并以字符串形式返回。
三、项目中用到的配置项
3.1、直接写在主脚本里
当你的程序很小的时候,可以直接把配置写在主脚本里
from flask import Flaskapp = Flask(__name__)
app.config['SECRET_KEY'] = 'some secret words'
app.config['DEBUG'] = True
app.config['ITEMS_PER_PAGE'] = 10
或者使用update方法,简化代码
from flask import Flaskapp = Flask(__name__)
app.config.update(DEBUG=True,SECRET_KEY='some secret words',ITEMS_PER_PAGE=10
)
附Flask官网-配置管理文档链接
3.1、单独写在一个配置文件里
程序逐渐变大时,配置也逐渐增多,写在主脚本里太占地方,不够优雅。我们可以创建一个单独的配置文件。和上面同样的配置。因为前面项目布局时分享过,project目录存储了整个项目的逻辑代码,所以我新增了一个config.py
在这个目录下:
# import os# 基础配置,使用继承的方式
class BaseConfig:TESTING = False# MySQL所在主机名,默认127.0.0.1HOSTNAME = "127.0.0.1"# MySQL监听的端口号,默认3306PORT = 3306# 连接MySQL的用户名,自己设置USERNAME = "root"# 连接MySQL的密码,自己设置PASSWORD = "root"# MySQL上创建的数据库名称DATABASE = "database_learn"# 通过修改以下代码来操作不同的SQL比写原生SQL简单很多 --》通过ORM可以实现从底层更改使用的SQL# app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"class DevelopmentConfig(BaseConfig):# 开启debugDEBUG = True# mysql配置HOSTNAME = "211.103.157.180"PORT = 3310USERNAME = "用户名"PASSWORD = "密码"DATABASE = "数据库名"SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"class ProductionConfig(BaseConfig):DEBUG = FalseSQLALCHEMY_DATABASE_URI = "mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"config = {"development": DevelopmentConfig,"production": ProductionConfig,
}
四、使用配置文件
通过from_object()方法导入配置
import os
# import logging
# from logging.handlers import TimedRotatingFileHandler
from flask import Flaskfrom project.config import config # 导入存储配置的字典...
def create_app(config_name=None):if config_name is None:config_name = os.getenv('FLASK_ENV', 'development') # 从环境变量中获取FLASK_ENV,并设置默认值app = Flask('project')# setup config,导入配置,根据配置环境实例化对象app.config.from_object(config[config_name])...return app