详解Python的Flash框架的常用语句 app = Flask(__name__),为什要以全局变量__name__作为初始化参数?

news/2024/11/16 17:38:35/

详解Python的Flash框架的常用语句:

app = Flask(__name__)

这一语句创建了一个Flask应用程序对象。

Flask是一个基于Python的轻量级Web框架,用于构建Web应用程序。在使用Flask时,我们需要创建一个Flask应用程序对象,该对象将充当我们构建Web应用程序的核心。

在初始化名叫app的对象时,为什以要以特殊全局变量__name__作为初始化值,这是理解这条语句的难点。

答案是这是为了方便Flask确定相关文件的路径,具体解释如下:

当脚本作为主程序运行时(此时__name__的值为__main__),Flask会将应用程序的根路径设置为脚本所在的目录。

假设您有以下的目录结构:

/myapp├── app.py└── templates└── index.html

app.py是您的Flask应用程序脚本,templates是存放模板文件的目录。

app.py脚本中,使用以下代码创建Flask应用程序对象:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'

当您在终端或命令行中执行以下命令时:

python /myapp/app.py

此时,由于__name__的值为__main__,所以Flask就知道了,脚本文件app.py所在的目录就是Flask相关功能函数所在的目录,此时Flask会将自己的根路径设置为/myapp,因此,Flask会在该路径下查找静态文件和模板文件。

现在,让我们考虑脚本作为模块被导入的情况。假设您有以下的目录结构:

/swh├── run.py└── myapp├── __init__.py└── views.py

run.py是一个简单的脚本,用于启动应用程序,而myapp是一个Python模块,其中包含Flask应用程序的定义。

/swh/myapp/__init__.py模块中,使用以下代码创建Flask应用程序对象:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'

/swh/run.py脚本中,使用以下代码导入并启动Flask应用程序:

from myapp import appif __name__ == '__main__':app.run()

当您在终端或命令行中执行以下命令时:

python /swh/run.py

Flask应用程序会发现__name__的值不为__main__,于是它就知道了它不应该把其相关路径设置为 /swh/,而应该设置为/swh/myapp/,然后在Flask会在该路径下查找静态文件和模板文件。


http://www.ppmy.cn/news/84020.html

相关文章

华为OD机试之字符串重新排列、字符串重新排序(Java源码)

字符串重新排列、字符串重新排序 题目描述 给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出: 1、单词内部调整:对每个单词字母重新按字典序排序 2、单词间顺序调整: 1)统计每个单词…

sa:segment anything Demo学习与介绍

地址 论文地址:https://arxiv.org/pdf/2304.02643v1.pdf 代码:https://github.com/facebookresearch/segment-anything 贡献 1、对未知的数据集和任务具有良好的零样本(zero-shot)分割性能。分割过程可全自动分割(Everything模式)或由不同的手工提示(Prompt模式)驱动…

gcc编译器报错集锦

文章主要记录一下不常见的错误,供后续开发参考: 日期:2023-05-25 16:31:41 报错:cc1: all warnings being treated as errors 编译条件: Ubuntu 18.04,编译器:aarch64-mix210-linux-gcc编译代码…

2023-04-23 学习记录--C/C++-邂逅C/C++(中)

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 上一篇:邂逅C/C(上) 一、if语句 ⭐️ (一)、格式 🍭 if…

【突发奇想 之 vector使用时性能测试】

目录: 前言分析vector不同操作对时间的影响1.for循环中使用 size()成员函数2.初始化时初始化为0,与其他值3.vector分配容量问题4. vector赋值操作5. 遍历:下标和迭代器 总结 前言 打怪升级:第90天 分析vector不同操作对时间的影响…

成功加冕!用友大易获评2023最佳招聘管理软件供应商

人力资源服务业旗帜性商业奖项2023金帜奖(HRFLAG AWARDS)颁奖典礼于近日隆重举行。经过3个月的评选,用友大易从615家人力资源服务机构中脱颖而出,最终荣获「2023最佳招聘管理软件供应商」奖项。 2023金帜奖(HRFLAG AWARDS)是人力资源服务行业旗帜性的商业…

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容,说是敏捷混合题型占到了 50%,但是这次318的考试,敏捷题占了大半,都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒,题目读不懂,或者觉得4个选项都不对或…

Redhat7.3linux系统防火墙命令总结

在Linux系统部署皕杰报表后,需要关闭防火墙或者开放报表工具使用的端口,才能通过浏览器访问报表。 在linux中如何关闭防火墙或开启端口呢?基本上是基于命令操作。通过几天的实践,总结了有关防火墙的操作命令,现记录如…