调用 route 方法时,在 Flask 对象前使用 '@' 的必要性是什么?

15 浏览
0 Comments

调用 route 方法时,在 Flask 对象前使用 '@' 的必要性是什么?

这个问题已经有了答案

Python中\"@\"符号有什么作用?

我刚接触Flask。当我碰到基础的Flask示例(下面的代码)时,我遇到了不确定性:在变量app前面使用@的必要性是什么。我尝试着在移除@的情况下运行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)}!'

admin 更改状态以发布 2023年5月25日
0
0 Comments

那是一个装饰器。简而言之,route是告诉Flask哪个URL应该调用我们的函数的装饰器。

0
0 Comments

@符号用于装饰器。

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

在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

0