在 Flask 框架 @app.route('/') 中,route('/') 函数如何用作 app 对象的装饰器?
In Flask framework @app.route('/') , how route('/') function is used as a decorator from app object?
在Flask框架中,app
是一个对象,route('/')
是一个函数,用作装饰器。谁能告诉我这个装饰器背后的机制是什么? route('/')
方法是如何调用的?
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
变量app
与文件app.py没有直接关系。你可以用不同的方式命名它们。
app.route('/')
是 returns 装饰器的函数调用,然后应用于 hello_world
.
你可以写
@app.route('/')
def hello_world():
return 'Hello, World!'
作为
root_decorator = app.route('/')
@root_decorator
def hello_world():
return 'Hello, World!'
或
root_decorator = app.route('/')
def hello_world():
return 'Hello, World!'
hello_world = root_decorator(hello_world)
这是对发生的事情的模拟:
class Flask:
def route(self, path):
def decorator(function):
def new_function(*args, **kwargs):
print(f'path is {path!r}. doing some Flask magic now.')
return function(*args, **kwargs)
return new_function
return decorator
app = Flask()
@app.route('/')
def hello_world():
return 'Hello, World!'
演示:
>>> result = hello_world()
path is '/'. doing some Flask magic now.
>>> result
'Hello, World!'
在Flask框架中,app
是一个对象,route('/')
是一个函数,用作装饰器。谁能告诉我这个装饰器背后的机制是什么? route('/')
方法是如何调用的?
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
变量app
与文件app.py没有直接关系。你可以用不同的方式命名它们。
app.route('/')
是 returns 装饰器的函数调用,然后应用于 hello_world
.
你可以写
@app.route('/')
def hello_world():
return 'Hello, World!'
作为
root_decorator = app.route('/')
@root_decorator
def hello_world():
return 'Hello, World!'
或
root_decorator = app.route('/')
def hello_world():
return 'Hello, World!'
hello_world = root_decorator(hello_world)
这是对发生的事情的模拟:
class Flask:
def route(self, path):
def decorator(function):
def new_function(*args, **kwargs):
print(f'path is {path!r}. doing some Flask magic now.')
return function(*args, **kwargs)
return new_function
return decorator
app = Flask()
@app.route('/')
def hello_world():
return 'Hello, World!'
演示:
>>> result = hello_world()
path is '/'. doing some Flask magic now.
>>> result
'Hello, World!'