使用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. SoapUI破解及安装教程

    之前学了一段时间的SoapUI,但是好久不用了,这里记录下专业版的破解的流程,后续的学习会不断更新. soapUI安装及破解(这里针对专业版) 下载地址:http://dl.eviware.com/l ...

  2. 利用PIL和Selenium实现页面元素截图

    预备 照张相片 selenium.webdriver可以实现对显示页面的截图: from selenium import webdriver dr = webdriver.Firefox() dr.g ...

  3. Solve Error: "errcode": 48001, "errmsg": "api unauthorized hint"

    当你想给微信公众号(不是测试账号)自定义菜单创建接口,遇到如下错误: OK Connection: keep-alive Date: Sat, 01 Dec 2018 05:02:08 GMT Con ...

  4. vuejs 70行代码实现便签功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 关于Android布局优化的代码使用

    1.  include标签: include标签的作用是在一个布局文件中导入另一个布局文件.在开发中经常会有多个页面同时拥有一部分相同的布局,这个时候如果每个布局都把那个部分的代码写一遍就会使得代码重 ...

  6. C语言学习随笔记

    第一次接触C语言,心中对新知识还是充满好奇的.最开始是从晓鹏老师那听说的C语言,记得当时晓鹏老师是在给我们介绍软考,叫我们去准备软考的时候说到了C语言告诉我们C语言是基础,C语言很重要,叫我们能学多好 ...

  7. 关于SQL配置管理工具无法打开0x8004100e问题!

    今天犯了个很“2”得问题,因为在远程数据库可以访问,并且也在安装程序中有看到装有SQLserver Mamngement Studio及其它程序,所以想在本地使用数据库应该可以但没想却总是报SQL配置 ...

  8. request.getParameterNames()和request.getParameterValues()

    request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举. 通过Enu ...

  9. 干了这杯java之ThreadLocal

    ThreadLocal Java篇 是什么 怎么用 源码 缺点 总结 是什么 ThreadLocal是一个关于创建线程局部变量的类,这个变量只能当前线程使用,其他线程不可用. ThreadLocal提 ...

  10. 谷歌AM HTML视频代码amp-video示例

    ntroduction Use amp-video to embed videos into your AMP HTML files. Video source files must be serve ...