python flask app.route()部分如何执行?

时间:2017-02-28 21:45:08

标签: python-3.x web flask

我是对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()时?此外,应用程序应该在一个网站的文件结构中放入什么文件夹?

1 个答案:

答案 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页面呈现的模板