当前位置: 首页 > news >正文

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类和两个子类ProductionConfigDevelopmentConfig,分别存储了生产环境和开发环境的配置信息。然后,在应用程序中根据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_DEBUGDB_NAMEDB_USERDB_PASSWORD四个环境变量来配置应用程序。如果FLASK_DEBUG的值为"1",则开启调试模式;否则关闭。如果DB_NAMEDB_USERDB_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的配置文件中进行配置&#xff1a; <bean class"com.test.interceptor.FirstInterceptor"></bean> …...

redis的实际使用

Redis是一种内存数据库&#xff0c;常用于缓存、会话管理、消息队列等。在项目中合理使用Redis可以提高系统性能和可扩展性。以下是一些使用Redis的建议&#xff1a; 1. 缓存常用数据&#xff1a;将经常使用的数据缓存在Redis中&#xff0c;以减少数据库的读取次数&#xff0c…...

造车先做三蹦子-之二:自制数据集(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年&#xff0c;其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序&#xff0c;如果将这些程序加载到浏览器&#xff0c;以及如何获取输入、产出输出&#xff0c;如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…...

Linux内核VFS详解

Linux内核VFS是什么? Linux内核VFS(Virtual File System)是Linux操作系统中的一个关键组件,用于提供文件系统抽象层。它允许用户空间和内核空间的各个部分以一种一致的方式访问不同类型的文件系统,包括磁盘文件系统(如EXT4、XFS、NTFS)、网络文件系统(如NFS、CIFS)、…...

在自己的服务器上部署个人博客和开源项目:实现数字存在感

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

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...