• Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式 --


    使用Flask-DebugToolbar调试程序

    扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句、配置选项、资源加载情况等信息。这些信息在开发时会非常有用。首先使用pipenv安装Flask-DebugToolbar及其依赖:

     

    然后实例化扩展提供的DebugToolExtension类,传入程序实例APP,以完成扩展的初始化:

    from flask immport Flask
    
    from flask_debugtoolbar import DebugToolbarExtension
    
    app = Flask(__name__)
    
    toobar = DebugToolbarExtension(app)

    开发时不需要也不建议使用Flask-DebugToolbar。Flask-DebugToolbar只在开启了调试模式时才会启动,所以我们要确保设置正确的FLASK_ENV环境变量值:开发时设为development;部署时则设为production。另外,Flask-DebugToolbar会拦截重定向请求,将DEBUG_TB_INTERCEPT_REDIRECTS配置变量设为False可以关闭这个特性

    DEBUG_TB_INTERCEPT_REDIRECTS = false

    这时启动程序,就会发现页面右侧多了一个工具栏,单击“Hide”按钮可以隐藏为一个浮动按钮,如下所示:

     

    在调试工具栏中,除了Flask版本以及页面的加载时间信息,右侧的功能选项分别为:HTTP首部、请求相关变量、配置变量、模板渲染记录、数据库查询记录、日志、路由列表、性能分析器。

    Flask配置的两种组织形式

    在Flask中,开发和部署时通常需要不同的配置。比如,存储在SECRET_KEY配置变量的秘钥,在开发时可以使用占位字符,但在生产环境下部署时则需要使用一个随机生成的字符串。为了区分,我们通常会有两种组织这种分离的方式。

    使用调试工具查看程序配置

    环境变量优先

    为了将配置和程序分离开来,建议通过环境变量来保存配置,并且对不同场景下的配置进行分离。

    .env和.flaskenv文件可以存储环境变量,对于包含敏感信息的配置,我们优先或仅从环境变量中读取,这些环境变量统一在.env文件中定义,从而实现了敏感配置的分离。通过在.gitignore中添加这个文件,不会被提交进Git仓库。

    实例文件夹覆盖

    为了方便存储开发和部署时的各类文件,Flask提供了实例文件夹支持(instance folder),我们可以在项目根目录(程序包旁)中创建一个名称为instance的文件夹,在这个文件夹中存储开发或部署时使用的配置文件,包含敏感信息的文件,或是临时创建的数据库文件等。

    如果将这个实例文件夹放到.gitignore文件夹中,可以确保不会被提交到Git仓库中。

    当使用示例文件夹存储配置时,一个方便的做法是把包含敏感数据的配置放到instance文件夹的配置文件中,外部只保留通用的公开配置。Flask允许加载多次配置,重复的配置以最后定义的配置为准,所以我们可以使用instance文件夹中的配置来覆盖通用配置:

    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object('config')  # 通用配置
    app.config.from_pyfile('config.py')  # instance文件夹下的配置

    在创建程序实例时,我们将instance_relative_config参数设为True,这会告诉Flask我们的配置文件路劲是相对于实例文件夹的(默认是相对于程序实例根目录的)。

    临时的数据库文件可以放到实例文件夹中,实例文件夹的路径可以通过app.instance_path属性获取,所以你可以使用下面的方法构建数据库URI:

    SQLALCHEMY_DATABASE_URI = ‘sqlite:///’ + os.path.join(app.instance_path, ‘data.db’)

    Flask不会自动创建实例文件夹,所以你需要手动创建。在单脚本程序中,实例文件夹在脚本旁创建;在使用程序包的程序中,实例文件夹在程序包旁创建。

    当我们使用flask shell命令时,输出的信息会给出实例文件夹的合适位置。

  • 相关阅读:
    ecshop后台新建一个模块,添加分页
    Mysql中设置远程访问的方法
    Thinkphp 3.2中文章详情页的上一篇 下一篇文章功能
    Thinkphp 3.2.2 利用phpexcel完成excel导出功能
    Thinkphp 3.2中字符串截取
    服务管理-文件服务器
    nginx-伤心的事
    shell-awk
    shell-sed
    shell-函数、数组、正则
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/10780841.html
Copyright © 2020-2023  润新知