调用route方法时,在Flask对象之前使用“@”有什么必要

2024-06-08 12:58:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的。当我遇到基本的Flask示例(下面的代码)时,我遇到了不确定性:在变量app之前需要使用@什么。我尝试在删除@时运行应用程序,但无法运行。如果我问的是一些非常基本的问题,请评论

from flask import Flask, escape, request

app = Flask(__name__)

@app.route('/')

def hello():
   name = request.args.get("name", "World")
   return f'Hello, {escape(name)}!'

Tags: 代码namefromimportapp应用程序flask示例
3条回答

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

@decorator_function
def decorated():
    pass

如果您已经阅读了Flask教程,那么您可能会熟悉此代码块中的语法

@app.route是一个装饰程序,用于匹配URL以查看Flask应用程序中的函数。

有关更详细的描述,您甚至可以参考此documentation 另外,在stackoverflow上还有一个类似的问题,您也可以参考this

@符号用于装饰器

Adecorator是一个函数,它接受另一个函数作为参数,并修改其行为

在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')的结果。正如您所看到的,这使得上面的代码更加方便和易于阅读


如果您查看the Flask source code,您将看到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

那是一个^{}。简言之,^{}是一个装饰器,它告诉Flask什么URL应该触发我们的函数

相关问题 更多 >