第一个 Flask 项目
第一个 Flask 项目
- 安装环境
- 创建项目
- 启动程序
- 访问项目
- 参数说明
- Flask对象的初始化参数
- app.run()参数
- 应用程序配置参数
- 使用 Flask 的 `config.from_object()` 方法
- 使用 Flask 的 `config.from_pyfile()` 方法
- 使用 Flask 的 `config.from_envvar()` 方法
- 步骤 1: 设置环境变量
- 步骤 2: 编写配置文件
- 步骤 3: 在 Flask 应用中使用 `config.from_envvar()`
- 4. 使用 Flask-AppConfig 或其他扩展
- 结论
安装环境
mkvirtualenv flask_envpip install flask
创建项目
启动程序
访问项目
http://127.0.0.1:5000/
参数说明
Flask是一个用Python编写的轻量级Web应用框架,它提供了构建Web应用所需的基本工具和功能。以下是Flask的一些主要参数说明:
Flask对象的初始化参数
在创建Flask应用时,可以通过Flask类的构造函数传递一些参数来定制应用的行为。
Flask对象的初始化是通过调用Flask
类并传递参数来完成的。虽然Flask
类提供了许多参数,但大多数情况下,你只需要关注其中的几个关键参数。下面是对Flask
类初始化时常用和可能用到的参数的详细解释:
-
import_name: 这是Flask应用所在的包或模块的名称。Flask使用这个参数来定位应用相对于其他资源的路径(如模板和静态文件)。在大多数情况下,你可以直接传递
__name__
作为这个参数的值。 -
static_folder: 这是一个可选参数,用于指定静态文件(如CSS、JS、图片等)的文件夹路径。默认情况下,它会被设置为
'<yourapplication>/static'
。 -
static_url_path: 这也是一个可选参数,用于指定静态文件在Web上访问的URL路径。默认情况下,它会与
static_folder
的参数值相同,即'/static'
。 -
template_folder: 这是一个可选参数,用于指定模板文件的文件夹路径。默认情况下,它会被设置为
'<yourapplication>/templates'
。 -
instance_path: Flask应用实例的文件夹路径,用于存放应用的一些临时文件(如上传的文件)。默认情况下,它会被设置为
'<yourapplication>/instance'
。但请注意,这个路径是相对于import_name
指定的包或模块的路径的。 -
instance_relative_config: 这是一个布尔值参数,用于指定配置文件是否应该相对于实例文件夹(由
instance_path
指定)加载。默认为False
,意味着配置文件应该位于应用的根目录或指定的绝对路径。 -
root_path: Flask应用的根目录。在大多数情况下,你不需要手动设置这个参数,因为Flask会根据
import_name
自动推断出根目录。 -
url_map_class: 用于创建URL映射的类的名称。这通常用于自定义URL解析的行为。大多数情况下,你可以忽略这个参数。
-
subdomain_matching: 一个布尔值,用于控制是否应该启用子域匹配。这在构建需要基于子域进行路由的复杂应用时非常有用。
-
template_context_processors: 一个列表,包含用于向模板上下文添加额外变量的函数。这些函数会在模板渲染之前被调用。
-
cli_class: 用于自定义Flask CLI的类。Flask CLI是一个强大的命令行界面,用于执行各种与Flask应用相关的任务。
-
cli_group: 用于将自定义命令分组到特定的Flask CLI子命令中的名称。
-
server_name: 服务器名称的字符串,用于辅助URL生成和子域支持。这通常只在需要知道应用的确切URL前缀时才会用到。
-
application_factory: Flask 1.1.0中引入的,一个布尔值,指示应用工厂模式是否被使用。这通常用于与WSGI服务器和扩展交互,以支持延迟创建应用实例。
请注意,虽然这里列出了许多参数,但在日常开发中,你通常只需要关注import_name
、static_folder
、static_url_path
和template_folder
等少数几个参数。其他参数主要用于更高级或特定的用例。
另外,值得注意的是,Flask的run()
方法(用于启动开发服务器)也接受一些参数,如host
、port
、debug
等,但这些参数与Flask对象的初始化无关,而是与启动开发服务器时的配置有关。
app.run()参数
app.run()
方法在 Flask 中用于启动开发服务器。虽然对于大多数基本用途,你可能只需要设置 debug
、host
和 port
几个参数,但 run()
方法实际上提供了更多的配置选项。以下是 app.run()
方法的一些常用和可能的参数解释:
-
host: 监听的主机名。默认为
127.0.0.1
,即服务器仅接收来自运行它的机器的连接。如果你想要你的应用可以从网络上的任何位置被访问,可以设置为'0.0.0.0'
。 -
port: 监听的端口号。默认为
5000
。端口号是一个 0 到 65535 之间的整数,用于区分运行在同一台机器上的不同服务。 -
debug: 是否启用 Flask 的调试模式。默认为
False
。在调试模式下,Flask 会提供更多关于错误的详细信息,并且允许你在不重启服务器的情况下修改代码并查看更改效果(使用某些开发工具时)。但请注意,在生产环境中应该关闭调试模式,因为它会暴露敏感信息。 -
threaded: 是否使用多线程。默认为
False
。如果你的应用需要处理多个并发请求,可以启用此选项。然而,在生产环境中,通常建议使用像 Gunicorn 这样的 WSGI 服务器来处理并发,因为它们提供了更好的性能和配置选项。 -
processes: 如果
threaded
为False
,则这个参数指定启动的进程数。默认为 1。这通常用于在 Unix 系统上,通过多进程而不是多线程来利用多核 CPU。但是,请注意,这与threaded
参数是互斥的;你不能同时设置threaded=True
和processes>1
。 -
passthrough_errors: 当设置为
True
时,错误会通过 HTTP 状态码传播。这主要用于调试目的,并允许错误处理程序(如果有的话)处理它们。默认为False
。 -
ssl_context: 一个包含 SSL 证书的元组
(certificate, key)
,用于启用 HTTPS。这对于保护你的应用和用户数据非常重要。如果没有提供,服务器将默认使用 HTTP。 -
use_reloader: 是否使用 Flask 的代码重新加载器。在调试模式下,这通常是启用的,但你可以通过将此参数设置为
False
来禁用它。注意,这可能会因 Flask 版本而异,因为某些版本可能直接通过debug
参数控制代码重新加载。 -
use_debugger: 是否启用 Flask 的交互式调试器。这允许你在出现未捕获的异常时获得一个交互式调试会话。默认为
True
当debug=True
时,但你可以通过将此参数设置为False
来禁用它。 -
use_evalex: 是否在调试器的代码执行环境中启用 evalex(一个可以执行任意 Python 代码的交互式 shell)。出于安全考虑,默认为
True
当debug
未被显式设置或debug=True
时,但你可以通过将此参数设置为False
来禁用它。
请注意,这些参数可能会随着 Flask 版本的更新而发生变化。因此,建议查阅你正在使用的 Flask 版本的官方文档以获取最准确的信息。
应用程序配置参数
在 Flask 应用程序中,配置参数是管理和定制应用行为的关键部分。Flask 提供了一种灵活的方式来加载和配置这些参数。以下是一些常用的方法来加载 Flask 应用程序的配置参数:
在 Flask 应用程序中加载配置参数是一个常见的需求,它允许你根据应用程序的不同环境(如开发、测试和生产)来调整其行为。以下是一些在 Flask 应用程序中加载配置参数的方法:
使用 Flask 的 config.from_object()
方法
你可以定义一个或多个配置类(通常是在一个单独的 Python 文件中),然后在 Flask 应用初始化时通过 config.from_object()
方法加载这些配置。
config.py
class Config:DEBUG = FalseTESTING = FalseSECRET_KEY = 'a_very_secret_key'class DevelopmentConfig(Config):DEBUG = Trueclass TestingConfig(Config):TESTING = Trueclass ProductionConfig(Config):DEBUG = False
app.py
from flask import Flask
from config import DevelopmentConfigapp = Flask(__name__)
app.config.from_object(DevelopmentConfig)# 现在 app.config 包含了 DevelopmentConfig 中的配置
使用 Flask 的 config.from_pyfile()
方法
如果你更喜欢使用配置文件(如 .ini
、.cfg
或 .py
文件,但不带类),你可以使用 config.from_pyfile()
方法。
config.py
DEBUG = True
SECRET_KEY = 'a_very_secret_key'
app.py
from flask import Flaskapp = Flask(__name__)
app.config.from_pyfile('config.py')# 现在 app.config 包含了 config.py 文件中的配置
注意:如果 config.py
文件不在 Flask 应用的根目录下,你需要提供完整的路径。
使用 Flask 的 config.from_envvar()
方法
Flask 的 config.from_envvar()
方法允许你根据环境变量中指定的文件名来加载配置。这种方法特别有用于当你想要根据环境(如开发、测试、生产)动态地选择配置文件时。
首先,你需要在环境变量中设置一个值,该值指向你的配置文件(例如,一个 .py
文件或 .ini
文件,但请注意 Flask 原生只支持 .py
文件或可以被解析为 Python 字典的 .json
文件)。然后,在 Flask 应用初始化时,使用 config.from_envvar()
方法并传入环境变量的名称。
步骤 1: 设置环境变量
在 Unix-like 系统中,你可以在 shell 配置文件(如 .bashrc
或 .bash_profile
)中设置环境变量:
export FLASK_CONFIG_FILE=/path/to/your/config.py
在 Windows 系统中,你可以在命令提示符或 PowerShell 中设置环境变量:
set FLASK_CONFIG_FILE=C:\path\to\your\config.py
或者使用 PowerShell:
$env:FLASK_CONFIG_FILE="C:\path\to\your\config.py"
步骤 2: 编写配置文件
假设你的配置文件是一个 Python 文件(config.py
),它看起来像这样:
# config.py
DEBUG = True
SECRET_KEY = 'a_very_secret_key'
# 其他配置...
步骤 3: 在 Flask 应用中使用 config.from_envvar()
在你的 Flask 应用中,使用 config.from_envvar()
方法来加载配置:
from flask import Flaskapp = Flask(__name__)
app.config.from_envvar('FLASK_CONFIG_FILE')# 现在 app.config 包含了 config.py 文件中的配置
然而,需要注意的是,config.from_envvar()
方法实际上期望环境变量指向一个 Python 文件(或可以解析为 Python 字典的 JSON 文件),并且该文件应该定义了一个 Python 字典或类似字典的对象(通常是通过定义一个或多个配置类来实现的),但在这个例子中,我们直接使用了 Python 文件。
如果你的环境变量指向的是一个 .ini
文件或其他非 Python 文件,并且你希望 Flask 能够加载它,你可能需要使用一个自定义的加载函数或 Flask 扩展(如 Flask-AppConfig,尽管它可能不直接使用 from_envvar()
方法)。
但是,对于 .ini
文件,Flask 没有直接的支持,因此你可能需要编写一些额外的代码来解析这个文件,并将其内容设置为 Flask 的配置。
对于 .json
文件,你可以使用 config.from_json()
方法,但同样,你需要先以某种方式(如通过环境变量)获取到 .json
文件的路径。不过,这通常不是通过 from_envvar()
方法直接完成的,因为 from_envvar()
预期的是一个指向 Python 配置文件的路径。
4. 使用 Flask-AppConfig 或其他扩展
虽然 Flask 核心本身提供了基本的配置加载功能,但你也可以使用 Flask 扩展(如 Flask-AppConfig)来简化配置加载过程。这些扩展通常提供了更灵活的配置加载选项,包括从多个源加载配置的能力。
结论
选择哪种方法取决于你的具体需求和环境。对于大多数项目,结合使用配置类和环境变量是一种灵活且强大的方法。这样,你可以轻松地根据不同的环境调整配置,而无需修改代码或配置文件。
相关文章:
第一个 Flask 项目
第一个 Flask 项目 安装环境创建项目启动程序访问项目参数说明Flask对象的初始化参数app.run()参数 应用程序配置参数使用 Flask 的 config.from_object() 方法使用 Flask 的 config.from_pyfile() 方法使用 Flask 的 config.from_envvar() 方法步骤 1: 设置环境变量步骤 2: 编…...
利用 Angular 发挥环境的力量
一.介绍 您是否曾想过如何在不同的环境中为同一应用设置不同的颜色、标题或 API 调用?可以肯定的是,生产 API 和测试 API 是不同的,应谨慎使用。部署时,我们不会在项目的所有地方手动更改所有 API 调用。不应这样做,因…...
Vue3+TypeScript+printjs 实现标签批量打印功能
前言:临时性需求没怎么接触过前端,代码实现有问题及优化点希望大佬可以留言告知一下 开发工具:VS CODE 界面开发:Vue3TypeScriptElementPlus 打印组件:Print-JS 前端打印入口图: 标签页面: …...
微信文件如何直接打印及打印功能在哪里设置?
在数字化时代,打印需求依旧不可或缺,但传统打印店的高昂价格和不便操作常常让人头疼。幸运的是,琢贝打印作为一款集便捷、经济、高效于一体的网上打印平台,正逐渐成为众多用户的首选。特别是通过微信小程序下单,更是让…...
dataX -20240804-master分支
1、相关报错 Error: java.io.IOException: java.lang.RuntimeException: ORC split generation failed with exception: org.apache.orc.impl.SchemaEvolution$IllegalEvolutionException: ORC does not support type conversion from file type struct<nanos:int> (10)…...
【网络】传输层
传输层 一、预备知识1、端口号1、端口号范围划分2、知名端口号3、两个问题4、netstat && iostate5、pidof6、谈下面协议始终铭记两个问题 二、UDP协议(简单)1、UDP协议端格式2、UDP的特点3、面向数据报4、UDP缓冲区 三、TCP协议(重点…...
学生管理系统之更新和删除、筛选
学生管理系统之更新和删除 建立新的窗口 添加组件 进行布局 使用Widget把二个放在一块,作为一列,然后全选进行栅格布局,最后添加弹簧进行微调。 编写增加的槽函数 在主函数中调用对话框...
教您一键批量下载拼多多批发图片信息,节省时间
图片是电商的核心展示手段,高质量、吸引人的图片能显著提升商品吸引力,增强用户体验,促进购买决策。良好的视觉呈现有助于品牌形象的塑造,提高转化率和客户满意度,对电商平台的流量和销售业绩具有直接影响。 使用图快…...
基于微信小程序的微课堂笔记的设计与实现(源码+论文+部署讲解等)
博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙ÿ…...
去噪扩散恢复模型
去噪扩散恢复模型 Bahjat Kawar 计算机科学系 以色列海法理工学院 bahjat.kawarcs.technion.ac.il Michael Elad 计算机科学系 以色列海法理工学院 eladcs.technion.ac.il Stefano Ermon 计算机科学系 美国加利福尼亚州斯坦福大学 ermoncs.stanford.edu …...
Stable Diffusion 官方模型V1.5版本下载
模型描述 Stable Diffusion的官方模型更适合绘制偏写实的风格,如果您想绘制二次元之类的风格,可以考虑下载本站的其它模型。 安装方法 将模型下载后,将会得到一个名为****.ckpt格式的文件,将该文件剪切至你的Stable Diffusion本…...
【算法】双指针-OJ题详解1
双指针-OJ题 移动零(点击跳转)原理讲解代码实现 复写零(点击跳转)原理讲解代码实现 快乐数(点击跳转)原理讲解代码实现 盛最多水的容器(点击跳转)原理讲解代码实现 有效三角形的个数…...
29 两个任务切换(1)
1 这里涉及到进程的切换与之前的 特权级的切换还是不一样的。 2 给每个进程 在 GDT表中,分配一个 TSS, 这个TSS中 保存着这个进程 所用到的 通用寄存器段寄存器 3个可能的栈, 当进行 进程切换的时候,就是切换到 另一个 TSS表&am…...
正则表达式概述
一、正则表达式概述 正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它使用一种特定的模式来描述和匹配一系列符合某个句法规则的字符串。在Python中,我们可以使用re模块来操作正则表达式…...
【C语言】Top K问题【建小堆】
前言 TopK问题:从n个数中,找出最大(或最小)的前k个数。 在我们生活中,经常会遇到TopK问题 比如外卖的必吃榜;成单的前K名;各种数据的最值筛选 问题分析 显然想开出40G的空间是不现实的&#…...
Rust 程序设计语言学习——并发编程
安全且高效地处理并发编程是 Rust 的另一个主要目标。并发编程(Concurrent programming),代表程序的不同部分相互独立地执行,而并行编程(parallel programming)代表程序不同部分同时执行,这两个…...
联邦学习研究综述【联邦学习】
文章目录 0 前言机器学习两大挑战: 1 什么是联邦学习?联邦学习的一次迭代过程如下:联邦学习技术具有以下几个特点: 2 联邦学习的算法原理目标函数本地目标函数联邦学习的迭代过程 3 联邦学习分类横向联邦学习纵向联邦学习联邦迁移…...
深入理解Python中的列表推导式
深入理解Python中的列表推导式 在Python编程中,列表推导式(List Comprehension)是一种简洁而强大的语法,用于创建和操作列表。它不仅提高了代码的可读性,还能显著减少代码的行数。本文将详细介绍什么是列表推导式,如何使用它,以及一些实际应用示例,帮助读者更好地理解…...
Android 实现左侧导航栏:NavigationView是什么?NavigationView和Navigation搭配使用
目录 1)左侧导航栏效果图 2)NavigationView是什么? 3)NavigationView和Navigation搭配使用 4)NavigationView的其他方法 一、实现左侧导航栏 由于Android这边没有直接提供左侧导航栏的控件,所以我尝试了…...
如何快速下载拼多多图片信息,效率高
图片是电商吸引顾客的关键因素,高质量的商品图片能提升产品吸引力,增强用户购买欲望。良好的视觉展示有助于建立品牌形象,提高转化率。同时,图片也是商品信息的主要传递媒介,对消费者决策过程至关重要。 使用图快下载器…...
windows 10下,修改ubuntu的密码
(1)在搜索框里面输入cmd,然后点击右键,选择管理员打开 Microsoft Windows [版本 10.0.22631.3880] (c) Microsoft Corporation。保留所有权利。 C:\Windows\System32>C: C:\Windows\System32>cd ../../ C:\>cd Users\ASUS\AppData\Local\Micros…...
【MySQL】慢sql优化全流程解析
定位慢sql 工具排查慢sql 调试工具:Arthas运维工具:Skywalking 通过以上工具可以看到哪个接口比较慢,并且可以分析SQL具体的执行时间,定位到哪个sql出了问题。 启用慢查询日志 慢查询日志记录了所有执行时间超过指定参数(lon…...
RabbitMQ高级特性 - 消息分发(限流、负载均衡)
文章目录 RabbitMQ 消息分发概述如何实现消费分发机制(限制每个队列消息数量)使用场景限流背景实现 demo 非公平发送(负载均衡)背景实现 demo RabbitMQ 消息分发 概述 RabbitMQ 的队列在有多个消费者订阅时,默认会通过…...
信号处理——自相关和互相关分析
1.概括 在信号处理中,自相关和互相关是相关分析非常重要的概念,它们能分析一个信号或两个信号在时间维度的相似性,在振动测试分析、雷达测距和声发射探伤得到了广泛的应用。自相关分析的研究对象为一个信号,互相关分析的研究对象…...
如何解决部分设备分辨率不适配
1)如何解决部分设备分辨率不适配 2)Unity中如何实现草的LOD 3)使用了Play Asset Delivery提交版本被Google报错 4)如何计算弧线弹道的落地位置 这是第396篇UWA技术知识分享的推送,精选了UWA社区的热门话题,…...
C#插件 调用存储过程(输出参数类型)
存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…...
代码随想录算法训练营day32 | 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯
碎碎念:开始动态规划了!加油! 参考:代码随想录 动态规划理论基础 动态规划常见类型: 动规基础类题目背包问题打家劫舍股票问题子序列问题 解决动态规划问题应该要思考清楚的: 动态规划五部曲࿱…...
【人工智能专栏】Learning Rate Decay 学习率衰减
Learning Rate Decay 学习率衰减 使用格式 optimizer = torch.optim.SGD(model.paraters(), lr=0.1, momentum=0.9, weight_decay=1e-4) scheduler = torch.optim...
浙大版《C语言程序设计(第3版)》题目集
练习4-11 统计素数并求和 本题要求统计给定整数M和N区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500)。 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。 输入…...
【学习笔记】Day 2
一、进度概述 1、inversionnet_train_light 试运行——未成功 2、DL-FWI基础入门培训-1,2,以及作业1的完成——暂未完成作业 二、详情 1、inversionnet_train_light 试运行 在补充完相关依赖后,运行仍有报错 产生原因:这个代码在当…...
郑州恩恩网站建设/百度seo网络营销书
我们知道,线程安全问题需要通过线程之间的同步来解决,而同步大多使用syncrhoized关键字,简单方便。但是syncrhoized功能上较单一,为此,concurrent包为我们提供了额外的几种同步控制工具,让我们可以根据不同…...
代账公司/roseonly企业网站优化
第一章 在皮皮鲁全家的协助下,觅工终于将致痴盔做出来了。 "拜托你们了,一定要给那头猪戴上。"觅工说完就闭上了眼睛。他是怀着负疚的心情离开人世的。 皮皮鲁全家向觅工的遗体告别后,拿着致痴盔离开了30&am…...
福建省建设厅网站人员/模板下载网站
mysql 替换是很多站长经常用到的,特别是wordpress搬家,换域名,或者采集后批量替换正文内容,小编介绍一种特别快速简易的办法。具体操作如下:第一、可视化phpmyadmin替换这里我们在phpmyadmin数据库中选择我们当前的数据…...
建公司网站报价/如何做网站网页
今日在公司电脑上安装了下桌面管理工具, 觉得其实管理系统可以桌面化。以往的B/S严格来讲只是实现了“半自动化”,要实现“全自动”模式则需要突破一大解决难题-对终端的有效监控。这个就可以用“桌面化”的方式来实现。 传统B/S如图: 桌面化…...
彩票网站开发/seo站内优化最主要的是什么
《泰山版小学信息技术第三册上册教案 全册》由会员分享,可在线阅读,更多相关《泰山版小学信息技术第三册上册教案 全册(19页珍藏版)》请在人人文库网上搜索。1、第1课 手工制作网上搜教材分析 在网络成为人们获取信息的主要渠道之一的今天,…...
网站的系统建设方式有哪些内容/雷神代刷网站推广
SQLSERVER 2005 以后提供了新的方式进行行列转换,下面是一个实例供参考: if object_id(tb) is not null drop table tbTestgocreate table tbTest(产品 varchar(10),季度 varchar(10),销售额 int)insert into tbTest values(产品1,一季度,1000) insert i…...