我是对flask和python的新手。例如,如果您有以下代码......
@app.route('/')
def index():
return "Hello world!"
@app.route('/accounts')
def accounts():
return some_data
@app.route('/login')
def login():
return render_template(login.html)
if __name__ == "__main__":
app.run()
这些会以什么顺序执行?根据我的理解,如果您在网站的/ accounts页面上,该功能将运行。如果您在/ login页面上,该功能将运行。路由方法的参数起什么作用?其次,运行最后两行代码的次数是多少次(app.run()会被调用一次还是每次调用app.route()时?此外,应用程序应该在一个网站的文件结构中放入什么文件夹?
答案 0 :(得分:10)
您是对的,当您转到该网站的特定页面时,将触发此处的每个功能。肯定有一些研究需要做进一步的研究才能获得更好的理解,但这只是一个简单的细分。
在Python中," main"运行的文件(意味着您使用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必须匹配的模式,以便触发为路由定义的函数。这个装饰器界面实际上很方便,见[here] [1]。换句话说,要创建具有要处理的函数的路径,您还可以使用app.add_url_rule()
函数而不是装饰器。取自Flask的文档:
add_url_rule(规则,端点=无,view_func =无,**)
连接网址规则。与route()装饰器完全一样。如果提供了view_func,它将在端点注册。
我刚刚在一个非常通用的层面上概述了它,但您需要深入了解Flask文档以了解您还可以使用它做什么。
编辑:刚刚意识到我没有回答你的所有问题。通常情况下,Flask会查找静态/文件夹以提供静态资产,例如不会更改的css和html页面,以及模板的模板/文件夹,这些模板通常具有将由来自数据的数据填充的占位符服务器。因此,基于您的代码的单个文件Flask应用程序可能如下所示:- app.py
static/
templates/
- login.html
其中login.html是一个用数据填充并为/ login页面呈现的模板