使用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命令时,输出的信息会给出实例文件夹的合适位置。

Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式的更多相关文章

  1. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  2. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  3. Flask实战-留言板-使用Faker生成虚拟数据

    使用Faker生成虚拟数据 创建虚拟数据是编写Web程序时的常见需求.在简单的场景下,我们可以手动创建一些虚拟数据,但更方便的选择是使用第三方库实现.流行的python虚拟数据生成工具有Mimesis ...

  4. Flask实战-留言板-使用Bootstrap-Flask简化页面编写

    使用Bootstrap-Flask简化页面编写 扩展Bootstrap-Flask内置了可以快速渲染Bootstrap样式HTML组件的宏,并提供了内置的Bootstap资源,方便快速开发,使用它可以 ...

  5. Python Flask之留言板(无数据库)

    一个py文件,一个html文件,可以直接运行 py文件 from flask import Flask, request, render_template, redirect, url_for imp ...

  6. 1、Flask实战第1天:第一个Flask程序

    Flask是流行的python web框架...(* ̄︶ ̄) 零基础到企业级论坛实战,人生苦短,我用python,开启FLask之旅吧... 安装开发环境 下载Python win版安装包 双击运行, ...

  7. php+redis实战留言板(todolist)与互粉功能

    目的:通过留言板(todolist)与互粉功能,掌握php操作redis的方法 相关数据操作命令 1,keys * 查看数据库所有的key 2,type + key: 如 type uid     查 ...

  8. 21、Flask实战第21天:常用的Flask钩子函数

    在Flask中钩子函数是使用特定的装饰器装饰的函数.为什么叫钩子函数呢?是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码.那么这种函数就叫做钩子函数. before_first_req ...

  9. django实战-留言板

    对应github链接:https://github.com/pshyms/django/tree/master/liuyanban 第一天 1. 创建一个新项目后,新建一个应用程序 python ma ...

随机推荐

  1. javaweb 与jsp页面的交互流程 (初次接触时写)

    javaweb 与jsp页面的交互流程 javaweb项目目录 1. javaweb项目的一般目录: 2. jsp 页面一般情况下放在 top(前台页面) back(后台页面) 3. 后台代码 放在s ...

  2. javascript对象序列化(对象与JSON字符串的互换)

    前一段时间用到h5的本地存储---需要把某个js对象存储在浏览器的本地存储中,用到了javascript对象的序列化与反序列化 所谓的序列化就是将对象的状态信息转换为可以存储或传输的形式的过程,基本上 ...

  3. nodejs----微信注册测试号获取token

    var PORT=8081; //监听8080端口号 var http=require('http'); var qs=require('qs'); var TOKEN='yezhenxu'; //必 ...

  4. 脚本:截取euroc数据集bag文件的其中一段

    脚本:截取euroc数据集bag文件的其中一段 功能:截取euroc数据集bag中的一段供算法测试 python脚本 #!/usr/bin/env python # ----------------- ...

  5. css----transition的应用,产生动画效果。

    应用transition属性产生动画效果 css中的transition属性设置元素的变化过程所需的时间. <!DOCTYPE html> <html> <head> ...

  6. smarty 循环一维关联数组

    <?php $oStatusList = array('1'=>'待投放','2'=>'正在运行','3'=>'暂停','4'=>'已完成','5'=>'已删除') ...

  7. COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution

    COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...

  8. SM3杂凑算法Python语言实现——第三部分

    SM3杂凑算法实现--第三部分 一.SM3 密码概述        我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...

  9. VUE-001-在表格单元格(el-table-column)中添加超链接访问

    在进行前端网页开发时,通常列表数据我们使用table展示.那么如何在 el-table-column 单元格中使用超链接呢? 如下即是解决方式的一种: 仅需要将如下代码: <el-table-c ...

  10. spring-session 2.0 实现细节

    一. 前置知识 1. redis 在键实际过期之后不一定会被删除,可能会继续存留 2. 具有过期时间的 key 有两种方式来保证过期 一是这个键在过期的时候被访问了 二是后台运行一个定时任务自己删除过 ...