Flask python 开发篇:配置文件

19 篇文章 3 订阅
5 篇文章 0 订阅

一、相关介绍

一般来说,在执行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 Flask

app = Flask(__name__)
app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', 'me@greyli.com')

os.getenv()是Python中的一个函数,用于获取系统环境变量的值。它可以获取指定环境变量的值,并以字符串形式返回。

三、项目中用到的配置项

3.1、直接写在主脚本里

当你的程序很小的时候,可以直接把配置写在主脚本里

from flask import Flask

app = Flask(__name__)
app.config['SECRET_KEY'] = 'some secret words'
app.config['DEBUG'] = True
app.config['ITEMS_PER_PAGE'] = 10

或者使用update方法,简化代码

from flask import Flask

app = 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.1
    HOSTNAME = "127.0.0.1"
    # MySQL监听的端口号,默认3306
    PORT = 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):
    # 开启debug
    DEBUG = True

    # mysql配置
    HOSTNAME = "211.103.157.180"
    PORT = 3310
    USERNAME = "用户名"
    PASSWORD = "密码"
    DATABASE = "数据库名"

    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"


class ProductionConfig(BaseConfig):
    DEBUG = False

    SQLALCHEMY_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 Flask

from 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

五、写在最后

宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值