Flask四种配置方式
Flask是一个轻量级的Python Web框架,被广泛应用于Web开发中。Flask提供了多种配置方式,可以根据不同的需求和场景进行选择。本篇博客将介绍Flask的几种配置方式,并提供相关代码示例。
Flask应用程序的配置对象
在Flask中,应用程序的配置信息存储在一个名为config的字典对象中。可以通过获取该对象并修改其中的键值对来配置应用程序。
Flask定义了一个Config类,用于存储默认配置信息。开发者可以继承该类并添加自己的配置信息。Flask提供了多种方式来指定使用哪个配置对象,接下来将分别介绍这些方式。
1. 配置类方式
首先介绍一种最常用的配置方式:使用配置类。开发者可以创建一个继承自Config类的子类,并在其中定义自己的配置信息。然后在应用程序中通过app.config.from_object()方法来使用该配置类。
以下是一个示例:
from flask import Flask, jsonify
import osclass Config(object):DEBUG = FalseTESTING = Falseclass ProductionConfig(Config):DB_NAME = "production_db"DB_USER = "production_user"DB_PASSWORD = "production_pass"class DevelopmentConfig(Config):DEBUG = TrueDB_NAME = "development_db"DB_USER = "development_user"DB_PASSWORD = "development_pass"app = Flask(__name__)if os.environ.get("FLASK_ENV") == "development":app.config.from_object(DevelopmentConfig)
else:app.config.from_object(ProductionConfig)@app.route("/")
def index():app_config = {"DEBUG": app.config["DEBUG"],"DB_NAME": app.config["DB_NAME"],"DB_USER": app.config["DB_USER"],"DB_PASSWORD": app.config["DB_PASSWORD"]}return jsonify(app_config)
在上述示例中,首先创建了一个Config类和两个子类ProductionConfig和DevelopmentConfig,分别存储了生产环境和开发环境的配置信息。然后,在应用程序中根据FLASK_ENV环境变量的值来加载对应的配置信息。最后,在路由函数中返回应用程序的配置信息。
2. 配置文件方式
除了使用配置类,还可以使用配置文件来配置Flask应用程序。Flask支持多种格式的配置文件,如.py、.ini、.json等。可以通过使用app.config.from_pyfile()、app.config.from_json()等方法来加载已存在的配置文件。
以下是一个使用.py文件作为配置文件的示例:
# config.py
DEBUG = True
DB_NAME = "config_db"
DB_USER = "config_user"
DB_PASSWORD = "config_pass"# app.py
from flask import Flask, jsonify
import osapp = Flask(__name__)
app.config.from_pyfile("config.py")@app.route("/")
def index():app_config = {"DEBUG": app.config["DEBUG"],"DB_NAME": app.config["DB_NAME"],"DB_USER": app.config["DB_USER"],"DB_PASSWORD": app.config["DB_PASSWORD"]}return jsonify(app_config)
在上述示例中,首先定义了一个config.py文件,其中存储了应用程序的配置信息。然后在应用程序中通过app.config.from_pyfile()方法加载该配置文件,并在路由函数中返回应用程序的配置信息。
3. 环境变量方式
还可以使用环境变量来配置Flask应用程序。这种方式可以使应用程序的配置信息更加安全和灵活。开发者可以通过设置不同的环境变量来改变应用程序的配置信息。
以下是一个示例:
from flask import Flask, jsonify
import osapp = Flask(__name__)app.config["DEBUG"] = os.environ.get("FLASK_DEBUG") == "1"
app.config["DB_NAME"] = os.environ.get("DB_NAME", default="default_db")
app.config["DB_USER"] = os.environ.get("DB_USER", default="default_user")
app.config["DB_PASSWORD"] = os.environ.get("DB_PASSWORD", default="default_pass")@app.route("/")
def index():app_config = {"DEBUG": app.config["DEBUG"],"DB_NAME": app.config["DB_NAME"],"DB_USER": app.config["DB_USER"],"DB_PASSWORD": app.config["DB_PASSWORD"]}return jsonify(app_config)
在上述示例中,通过获取FLASK_DEBUG、DB_NAME、DB_USER和DB_PASSWORD四个环境变量来配置应用程序。如果FLASK_DEBUG的值为"1",则开启调试模式;否则关闭。如果DB_NAME、DB_USER和DB_PASSWORD的值不存在,则使用默认值"default_db"、"default_user"和"default_pass"。
4. 实例文件方式
实例文件是一种特殊的配置文件,用于存储应用程序的实例化配置信息。这些配置信息通常包含本地开发环境的特定设置,如数据库连接字符串、密钥等。可以通过在项目目录中创建instance文件夹,并将配置文件放置在其中来使用实例文件。
以下是一个示例:
# instance/config.py
DEBUG = True
DB_NAME = "instance_db"
DB_USER = "instance_user"
DB_PASSWORD = "instance_pass"# app.py
from flask import Flask, jsonifyapp = Flask(__name__)app.config.from_pyfile("default_config.py")
app.config.from_pyfile("config.py", silent=True)@app.route("/")
def index():app_config = {"DEBUG": app.config["DEBUG"],"DB_NAME": app.config["DB_NAME"],"DB_USER": app.config["DB_USER"],"DB_PASSWORD": app.config["DB_PASSWORD"]}return jsonify(app_config)
在上述示例中,首先定义了一个默认配置文件default_config.py,然后在应用程序中通过app.config.from_pyfile()方法加载该配置文件。接着,再通过app.config.from_pyfile()方法加载实例文件config.py,并将silent参数设置为True,以避免在加载过程中产生异常。最后,在路由函数中返回应用程序的配置信息。
本文介绍了Flask的几种配置方式,包括配置类方式、配置文件方式、环境变量方式和实例文件方式。不同的配置方式适用于不同的需求和场景,开发者可以根据实际情况进行选择。
相关文章:
Flask四种配置方式
Flask是一个轻量级的Python Web框架,被广泛应用于Web开发中。Flask提供了多种配置方式,可以根据不同的需求和场景进行选择。本篇博客将介绍Flask的几种配置方式,并提供相关代码示例。 Flask应用程序的配置对象 在Flask中,应用程序…...
基于nodejs+vue备忘记账系统mysql
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
使用Vscode创建一个C_Hello程序
Vscode用来学习C语言语法确实很方便。问题是安装好了,不会用,或编译失败,也是常有的事情,其中一个原因就是不会创建工作区。下面介绍使用Vscode创建一个C语言工作区。有时候看着很简单,时间久了,我竟然忘记…...
【31】c++设计模式——>模板方法模式
模板方法模式通常由以下几个部分组成: 1.抽象基类(Abstract Base Class):抽象基类定义了一个算法的骨架,其中包含了模板方法和一些基本操作方法。模板方法在抽象基类中被声明为虚函数,它定义了算法的流程&…...
docker和K8S环境xxl-job定时任务不执行问题总结
文章目录 xxl-job 任务调度原理1 问题1 时区导致的任务没有执行的问题解决方案 2 执行器注册和下线导致的问题(IP问题)解决方案 3 问题3 调度成功,但是执行器的定时任务未执行4 问题4 数据库性能问题,导致查询任务和操作日志数据卡…...
【Leetcode】218.天际线问题(Hard)
一、题目 1、题目描述 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示: l…...
try catch finally代码块的作用
try-catch-finally 代码块是用于处理程序中可能发生的异常情况的一种结构。它的作用在于: try 代码块中的代码用于包含可能会引发异常的代码。catch 代码块用于捕获并处理 try 代码块中抛出的异常。可以通过 catch 代码块中的逻辑来处理异常,如打印错误…...
【Sentinel】Sentinel簇点链路的形成
说明 一切节点的跟是 machine-root,同一个资源在不同链路会创建多个DefaultNode,但是在全局只会创建一个 ClusterNode machine-root/\/ \EntranceNode1 EntranceNode2/ \/ \DefaultNode(nodeA) DefaultNode(nodeA)|…...
Elasticsearch之mapping
文章目录 以显式的方式创建一个映射查看某个具体索引的mapping定义向已存在的映射中添加一个新的属性查看映射中指定字段的定义信息更新已存在映射的某个字段 1、 官方文档地址 2、 字段类型 1、定义:映射是定义文档及其包含的字段如何存储和索引的过程。 2、每个…...
6、PostgreSQL 数据类型之一:数字类型和货币类型
PostgreSQL 作为一个强大的开源关系型数据库管理系统,本身支持多种数据类型,包括标准 SQL 数据类型以及一些扩展数据类型。 PostgreSQL 支持多种数据类型的设计理念是为了满足不同应用场景的需求,提供更大的灵活性和数据处理能力。原因如下&…...
计算机视觉与深度学习 | 基于点线融合的视觉惯性SLAM前端
===================================================== github:[https://github.com/MichaelBeechan] CSDN:[https://blog.csdn.net/u011344545] ===================================================== 引言 本文中将介绍视觉惯性SLAM的前端部分,首先是传感器数据处理…...
MDK与keilC51共存的方法
MDK与keilC51共存的方法 在网上搜的资料MDK与KeilC51安装顺序都搞反了,而且大家都没成功过,反倒是转发了很多错误的教程。 用此安装方法解决了MDK与KeilC51的共存问题。所有功能完美运行。 因为MDK功能比KeilC51多,所以要先安装KeilC51 1、先…...
c_指针
文章目录 *(p1)1表示第 1 行第 1 个元素的地址。如何理解呢?下标运算符的规则括号 int a; // 1.一个整数 int *a; // 2.一个指向整数的指针 int **a; // 3.一个指向指针的指针, 它所指向的指针又指向一个整数型数据 ;一个指向 …...
循环队列c语言版
一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…...
SprringMVC拦截器
1、拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置: <bean class"com.test.interceptor.FirstInterceptor"></bean> …...
redis的实际使用
Redis是一种内存数据库,常用于缓存、会话管理、消息队列等。在项目中合理使用Redis可以提高系统性能和可扩展性。以下是一些使用Redis的建议: 1. 缓存常用数据:将经常使用的数据缓存在Redis中,以减少数据库的读取次数,…...
造车先做三蹦子-之二:自制数据集(5x5数据集)230102
#Jupyter Notebook231001import torch import torch.nn as nn import torch.optim as optim# 定义模型 class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(25, 50)self.fc2 = nn.Linear(50, 6)def forward(self, x):x = x.view(-1, 25…...
JS操作DOM及CSS
JS创造于1994年,其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序,如果将这些程序加载到浏览器,以及如何获取输入、产出输出,如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…...
Linux内核VFS详解
Linux内核VFS是什么? Linux内核VFS(Virtual File System)是Linux操作系统中的一个关键组件,用于提供文件系统抽象层。它允许用户空间和内核空间的各个部分以一种一致的方式访问不同类型的文件系统,包括磁盘文件系统(如EXT4、XFS、NTFS)、网络文件系统(如NFS、CIFS)、…...
在自己的服务器上部署个人博客和开源项目:实现数字存在感
在数字时代,拥有自己的服务器不再是一项难以实现的任务。通过云计算和开源技术的广泛应用,个人可以轻松地拥有自己的服务器,并在其上部署个人博客以及开源项目,为自己在互联网上创造一个数字存在感。本文将介绍如何在自己的服务器…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
