调用 route 方法时,在 Flask 对象前使用 '@' 的必要性是什么?
调用 route 方法时,在 Flask 对象前使用 '@' 的必要性是什么?
这个问题已经有了答案:
我刚接触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日
@
符号用于装饰器。
装饰器是一个以另一个函数作为参数的函数,并修改其行为的函数。
在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