调用路由方法时,在 Flask 对象之前使用 '@' 需要什么



我是Flask的新手。当我遇到基本的 Flask 示例(代码下方(时,我坚持不确定性:在变量应用程序之前需要使用@。我尝试在删除应用程序时运行应用程序@,但我不能。如果这是我问的一些非常基本的事情,请发表评论。

from flask import Flask, escape, request
app = Flask(__name__)
@app.route('/')
def hello():
name = request.args.get("name", "World")
return f'Hello, {escape(name)}!'

@符号用于装饰器。

装饰器是一个将另一个函数作为参数并修改其行为的函数。

在 Flask 的情况下,app.route是一个装饰器,它将"安装"您的函数作为 Web 应用程序中特定路由的处理程序。

这样做:

@app.route('/foo')
def hello():
return 'Hello'

与执行相同:

def f():
return 'Hello'
decorator = app.route('/foo')
hello = decorator(f)

@符号的作用是隐式调用app.route('/foo')的结果,并将函数作为参数。如您所见,这使得上面的代码更加方便和易于阅读。


如果您查看 Flask 源代码,您将看到route()的定义是类Flask的方法:

class Flask:
#...
def route(self, rule, **options):
def decorator(f):
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator

这是一个decorator。简而言之route是装饰器,它告诉 Flask 什么 URL 应该触发我们的函数。

Python 装饰器是用于转换其他函数的函数。调用修饰函数时,将改为调用装饰器。然后,装饰器可以执行操作、修改参数、停止执行或调用原始函数。我们可以使用装饰器在执行视图之前用我们想要运行的代码包装视图。

@decorator_function
def decorated():
pass

如果您已经学习了 Flask 教程,则此代码块中的语法可能看起来很熟悉。

@app.route是一个装饰器,用于匹配 URL 以查看 Flask 应用中的功能。

有关更详细的说明,您甚至可以参考此文档 此外,在堆栈溢出上也提出了类似的问题,您也可以参考这个问题。

最新更新