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

Jas*_*llo 6 flask python-3.x web

我是烧瓶和蟒蛇的新手.例如,如果您有以下代码......

@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()
Run Code Online (Sandbox Code Playgroud)

这些执行的顺序是什么?根据我的理解,如果您在网站的/ accounts页面上,该功能将运行.如果您在/ login页面上,该功能将运行.路由方法的参数起什么作用?其次,最后两行代码运行多少次(app.run()会被调用一次还是每次调用app.route()时?此外,应用程序应该在一个网站的文件结构中放入什么文件夹?

Ana*_*Rao 13

您是对的,当您转到该站点的特定页面时,将触发此处的每个功能.肯定有一些研究需要做进一步的研究,以获得更好的理解,但这是一个简单的细分.

在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!"
Run Code Online (Sandbox Code Playgroud)

就像你告诉@app.route()装饰者在某些时候打电话的功能一样.@app.route()它是一个装饰器,它被定义为在执行其内部命令的过程中调用你给它的函数.它所采用的输入参数是所谓的url规则,它基本上类似于传入请求的url必须匹配的模式,以便触发为路由定义的函数.这个装饰器界面实际上很方便,见[here] [1].换句话说,要创建一个具有要处理的函数的路径,您还可以使用该app.add_url_rule()函数而不是装饰器.从Flask的文档中可以看出:

add_url_rule(rule,endpoint = None,view_func = None,**)

连接URL规则.与route()装饰器完全一样.如果提供了view_func,它将向端点注册.

我刚刚在一个非常通用的层面上概述了它,但您需要深入了解Flask文档以了解您还可以使用它做什么.

编辑:刚刚意识到我没有回答你的所有问题.通常,Flask会查找静态/文件夹以提供静态资产(如css和html页面,这些资源不会更改),以及模板的模板/文件夹,这些模板通常具有将由来自服务器的数据填充的占位符.因此,基于您的代码的单个文件Flask应用程序可能如下所示:

- app.py
static/
templates/
    - login.html
Run Code Online (Sandbox Code Playgroud)

其中login.html是一个模板,用于填充数据并为/ login页面呈现