我以与这里相同的方式实现了装饰器
How to make a python decorator function in Flask with arguments (for authorization)
但问题依然未解决…
How to make a python decorator function in Flask with arguments (for authorization)
但问题依然未解决…
我有这个功能与装饰器
@blueprint.route('<var>') @blueprint.my_decorator(var) def function(var): do stuff
我收到这个错误
NameError: global name 'var' is not defined
我该如何解决?
更新
蓝图是继承Blueprint类的一个类.
所以我实现了这个方法
def my_decorator(self,fn): @wraps(fn) def decorator(*args,**kwargs): value = kwargs['value'] # do stuff with value return fn(*args,**kwargs) return decorator
但仍然是一个uknown的关键…
解决方法
装修者在进口时执行,基本上是语法糖:
@foo(bar) def baz(): return 'w00t!'
相当于
def baz(): return 'w00t!' baz = foo(bar)(baz)
所以在上面的例子中,变量bar必须存在于该模块的全局范围之前,才能作为参数传递给装饰器.这就是你告诉你的错误.
更新
基于下面的讨论,问题中的代码应该拦截传递给查看函数的值,并使用它执行某些操作.以下是一个示例:
from functools import wraps from flask import Flask,abort app = Flask(__name__) def foobar(fn): @wraps(fn) def decorated_view(*args,**kwargs): value = kwargs['value'] # Do something with value... if value == 'foobar': abort(400) return fn(*args,**kwargs) return decorated_view @app.route('/<value>') @foobar def view(value): return value