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)、…...
在自己的服务器上部署个人博客和开源项目:实现数字存在感
在数字时代,拥有自己的服务器不再是一项难以实现的任务。通过云计算和开源技术的广泛应用,个人可以轻松地拥有自己的服务器,并在其上部署个人博客以及开源项目,为自己在互联网上创造一个数字存在感。本文将介绍如何在自己的服务器…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...