Flask python 开发篇:配置文件

一、相关介绍

一般来说,在执行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. Flask python 开发配置文件

    2024-03-13 17:30:02       45 阅读
  2. VSCode配置json文件 C语言

    2024-03-13 17:30:02       37 阅读
  3. Linux开发:PAM2 配置文件

    2024-03-13 17:30:02       45 阅读
  4. linux开机启动配置文件

    2024-03-13 17:30:02       33 阅读
  5. Spring 开发 pom.xml 配置文件(通用配置

    2024-03-13 17:30:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 17:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 17:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 17:30:02       82 阅读
  4. Python语言-面向对象

    2024-03-13 17:30:02       91 阅读

热门阅读

  1. Linux编程4.1 网络编程-前导

    2024-03-13 17:30:02       45 阅读
  2. Fastjson 1.2.24反序列化漏洞(Vulhub)使用方法

    2024-03-13 17:30:02       48 阅读
  3. Android硬件获取序列号sn适配Android9+

    2024-03-13 17:30:02       43 阅读
  4. HDFS面试重点

    2024-03-13 17:30:02       47 阅读
  5. 如何水文章:嚼口香糖是否会变瘦?

    2024-03-13 17:30:02       51 阅读
  6. (差分)胡桃爱原石

    2024-03-13 17:30:02       42 阅读
  7. mysql 技术100问?

    2024-03-13 17:30:02       35 阅读