使用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. nginx Provisional headers are shown

    项目用的Nginx做的代理,重启电脑后,重启项目和Nginx 浏览器报 Provisional headers are shown  解决: host文件添加: 127.0.0.1   cleaner ...

  2. scrapy模拟登录

    对于scrapy来说,也是有两个方法模拟登陆: 直接携带cookie 找到发送post请求的url地址,带上信息,发送请求 scrapy模拟登陆之携带cookie 应用场景: cookie过期时间很长 ...

  3. react-redux简单的记事本应用

    首先给大家普及一个方法: let data = [ {id:1,text:'手机',check:false}, {id:2,text:'电脑',check:false}, {id:3,text:'平板 ...

  4. Selenium 3----获取断言信息

    断言:把实际结果与预期进行比较. 一般可以通过获取title .URL和text等信息进行断言. title:用于获得当前页面的标题. current_url:用户获得当前页面的URL. text:获 ...

  5. 关于Java8:StreamAPI的一点记录

    关于 Stream ,Functional Interface 的一点记录 stream对于集合操作的便捷度提升: import java.util.ArrayList; import java.ut ...

  6. centos 7安装mysql 执行./scripts/mysql_install_db --user=mysql 报错 FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper

    [root@localhost mysql]# ./scripts/mysql_install_db  --user=mysql FATAL ERROR: please install the fol ...

  7. HotSpot设计原理与实现:一、初识HotSpot

    一.HotSpot内核模块组成和功能框架 1.HotSpot内核模块图 (1)Prims模块: (2)Service模块: (3)Runtime模块: 二.虚拟机生命周期(JVM初始化过程) 1.虚拟 ...

  8. seafile ubuntu 安装相关

    1,各种原因,需要安装 seafile,好,开始安装. 2,参考 https://github.com/haiwen/seafile-server-installer-cn 1,Ubuntu 16.0 ...

  9. 浏览器User-Agent大全

    what's the User-Agent UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你 ...

  10. python 时间戳和时间格式互相转换

    #!/usr/bin/python3 # -*- coding: utf-8 -* import time def str_to_stamp(): # 转换显示格式 time1 = time.strp ...