• 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
    
    • 1
    • 2
    import os
    from flask import Flask
    
    app = Flask(__name__)
    app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', 'me@greyli.com')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    from flask import Flask
    
    app = Flask(__name__)
    app.config.update(
        DEBUG=True,
        SECRET_KEY='some secret words',
        ITEMS_PER_PAGE=10
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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,
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    四、使用配置文件

    通过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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    使用helm快速安装 grafana&prometheus
    【黄啊码】MySQL入门—9、什么?都2022了,还不知道什么是事务?
    鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
    Android学习笔记 33. 热修复
    Go 微服务开发框架 DMicro 的设计思路
    零成本体验美国云服务器,更方便的体验和选择
    推荐一个我朋友的salesforce学习网站
    LeetCode 2316. 统计无向图中无法互相到达点对数::广度优先搜索(BFS)
    从底层结构开始学习FPGA----RAM IP核及关键参数介绍
    Stable Diffusion AI绘图使用记录
  • 原文地址:https://blog.csdn.net/snow_love_xia/article/details/136623332