您是对的,当您转到网站的特定页面时,这里的每个功能都会被触发。您肯定需要做一些进一步的研究才能更好地理解,但这里有一个简单的细分。
在 Python 中,运行的“主”文件(即您使用 python 命令运行的文件:python etc.py)将在解释之前将其文件名内部替换为“__main__”。因此,基于这些知识,我们可以说,如果您将此代码作为主文件运行该文件,则该条件语句if __name__ == "__main__" 中的代码将被执行。因此,app.run() 被执行,并且只执行一次,因为这个 if 块不在任何类型的类、函数或控制结构中,并且文件只被解释一次。
接下来,@app.route(....) 是一种叫做装饰器的东西。这是对装饰器是什么以及如何使用它们的一个很好的介绍:https://realpython.com/blog/python/primer-on-python-decorators/。那里的第一段真的很重要。
根据定义,装饰器是一个函数,它接受另一个函数并扩展后一个函数的行为而不显式修改它。
我也非常喜欢关于装饰器的中级 Python 章节,我建议您查看。 http://book.pythontips.com/en/latest/decorators.html
基本上就是你定义的这些路由函数,比如:
def index():
return "Hello world!"
就像你告诉@app.route()装饰器在某个时候调用的函数。 @app.route() 是一个装饰器,它被定义为在执行其内部命令期间的某个时间点调用你给它的函数。它采用的输入参数是所谓的 url 规则,它基本上就像一个模式,传入请求的 url 必须匹配才能触发您为路由定义的函数。这个装饰器接口实际上是一种方便,请参见[这里][1]。换句话说,要使用要处理的函数创建路由,您还可以使用 app.add_url_rule() 函数而不是装饰器。取自 Flask 的文档:
add_url_rule(rule, endpoint=None, view_func=None, **)
连接一个 URL 规则。与 route() 装饰器完全一样。如果提供了 view_func,它将被注册到端点。
我只是在一个非常通用的级别上对其进行了概述,但是您需要深入了解 Flask 文档以了解您可以用它做些什么。
编辑:刚刚意识到我没有回答你所有的问题。通常,Flask 会寻找一个 static/ 文件夹来提供静态资产,例如永远不会更改的 css 和 html 页面,以及一个 templates/ 文件夹,用于存放通常具有占位符的模板,这些占位符将由来自服务器的数据填充。因此,基于您的代码的单个文件 Flask 应用程序可能看起来像这样:
- app.py
static/
templates/
- login.html
其中 login.html 是要填充数据并为 /login 页面呈现的模板