使用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. java重构四则运算

    package 重构四则运算; import java.io.IOException; public class Test { public static void main(String[] arg ...

  2. 变量类型-Tuple

    教程:一:元组的创建        元组(tuple)与列表类似,不同之处在于元组的元素不能修改    (1)tuple写在圆括号之间,元素用逗号隔开    (2)元组元素的类型可以不同    (3) ...

  3. JDBC的理解

    import java.sql.*;//倒入java.sql包 public class JDBC { //封装没有返回值的jdbc函数(Update) --适用于增 删 改 public stati ...

  4. NTFS文件系统详细分析

    NTFS文件系统详细分析 第一部分 什么是NTFS文件系统 想要了解NTFS,我们首先应该认识一下FAT.FAT(File   Allocation   Table)是“文件分配表”的意思.对我们来说 ...

  5. Python 学习笔记8 循环语句 while

    While循环是哟中利用条件语句,不断的执行某一段代码块,达到批量操作输出等一系列的操作,直到条件不满足或者被强制退出为止. 其工作流程如下: (图片来源菜鸟教程:http://www.runoob. ...

  6. express 随笔

    #express 1.使用Express 应用生成器 npm install express-generator -g 2.创建一个命名为 myapp 的应用 express myapp 3.安装所有 ...

  7. API 自动化框架

    API 自动化框架 个人认为接口自动化测试使用python语言编写更加简单,但所有接口自动化项目代码的思维都是一样的 1.项目包结构 1.case:存放用例数据的包,将所有用例数据以配置文件形式传入 ...

  8. Vue项目在开发环境跨域和生成环境部署跨域问题解决

    一.在dev环境下的跨域问题解决1.项目使用的是axios请求网络,将baseUrl修改为/api (这里是使用webpack提供的代理功能将/api代理成目标接口host) axios.defaul ...

  9. 3n+1猜想——模拟

    package dxb.com; import java.util.Scanner; public class caixiang { public static void main(String[] ...

  10. 9、Flutter 实现 生成二维码

    1.加入依赖 在 pubspec.yaml 中 dependencies 节点下添加: dependencies: qr_flutter: ^ 2.引入代码 在需要细线二维码的 dart 类中引入依赖 ...