创建Flask实例时,我们总是将其__name__用作第一个参数,但是为什么呢?
class flask.Flask(import_name, static_path=None, static_url_path=None,static_folder='static', template_folder='templates', instance_path=None, instance_relative_config=False)
Run Code Online (Sandbox Code Playgroud)
官方文件说第一个参数用于查找资源,如何?
导入名称用于解析Flask应用程序的安装目录(请参见flask / helpers.py中的get_root_path功能)。这样,诸如,和相关文件路径之类的内容就可以解析为应用程序文件夹中的文件,而无需提供文件路径。render_templatesend_static_fileconfig
考虑一个没有此功能的极其简单的Python应用程序:
print("Running simple_app")
with open('the-folder/simple.file', 'r') as f:
for line in f:
print(f)
Run Code Online (Sandbox Code Playgroud)
Hello
World!
Run Code Online (Sandbox Code Playgroud)
目录结构如下所示:
some-path/
simple-app/
simple_app.py
the-folder/
simple.file
Run Code Online (Sandbox Code Playgroud)
如果我们在当前工作目录下启动Python,那么simple-app/一切都会正常进行:
simple-app$ python simple_app.py
Running simple_app
Hello
World!
Run Code Online (Sandbox Code Playgroud)
但是,如果我们向上移动一个文件夹,然后重试:
some-path$ python simple-app/simple_app.py
Traceback (most recent call last):
IOError: [Errno 2] No such file or directory: 'the-folder/simple.file'
Run Code Online (Sandbox Code Playgroud)
当我们向下移动一个文件夹时,也会发生同样的事情。但是,如果可以获取simple_app.py文件系统上的位置,则可以使用以下命令安装os.join目录simple_app.pythe-folder/simple.file
with open(os.join(SIMPLE_APP_DIR, 'the-folder/simple.file', 'r') as f:
Run Code Online (Sandbox Code Playgroud)
而且我们的工作目录无关紧要,因为我们将始终处理绝对路径。这就是Flask所做的,这就是为什么它需要__name__传入的原因。
小智 0
文档的快速入门部分对此进行了解释。
\n\nhttp://flask.readthedocs.org/en/latest/quickstart/#a-minimal-application
\n\n引用自文档
\n\n\n\n第一个参数是 application\xe2\x80\x99s 模块或包的名称。如果您使用单个模块(如本例所示),则应该使用
\n__name__,因为根据它是作为应用程序启动还是作为模块导入,名称会有所不同(__main__与实际导入名称相对)。这是必要的,以便 Flask 知道在哪里寻找模板、静态文件等。
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |