所以,我在学习python中的FLASK框架,并做了我的第一个简单的程序,默认情况下,我看到人们使用的是 app = Flask(__name__)
而就在这一行下面,他们使用的是装饰器。@app.route("/")
所以我想,如果我把变量的名字改成别的,会发生什么?像下面的代码,我把它改成了 something = Flask(__name__)
所以现在我很困惑,我装饰功能的时候怎么还能用呢?index()
与 @something.route("/")
中定义的装饰器函数的名称。FLASK
如果是的话,我怎样才能让我自己的装饰器也能像这样动态地改变它们的名字呢?
from flask import Flask
something = Flask(__name__)
@something.route("/")
def index():
return "Hello, World!"
装饰符只是一个语法糖。
def decorator(func):
pass
@decorator
def decorated():
pass
是一样的。
def decorator(func):
pass
def decorated():
pass
decorated = decorator(decorated)
装饰符的名称不过是一个接受一个参数的函数。你甚至可以使用 print
函数作为一个装饰器。任何有效的可调用都可以。
@print
def index():
pass
很明显,这没有什么意义,因为:
def index():
pass
index = print(index)
无论如何,这就是flask中的实现方式
class Flask:
def route(self, url):
def wrapper(func):
# register route for url
return func
return wrapper
something = Flask()
@something.route("/")
def index():
pass
something.route("/")
是一个函数调用,返回真正的装饰器,其实就是名为wrapper的内部函数。
所以你甚至可以做这样的事情。
something_route_index = something.route("/")
@something_route_index
def index():
pass