![](/img/trans.png)
[英]How to make a python decorator function in Flask with arguments (for authorization)
[英]How can a Flask decorator have arguments?
我以与此处相同的方式实现了一个装饰器。 如何在Flask中使用参数(用于授权)制作python装饰器函数,但问题仍未解决...
我的装饰器具有此功能
@blueprint.route('<var>')
@blueprint.my_decorator(var)
def function(var):
do stuff
我得到这个错误
NameError: global name 'var' is not defined
我该如何解决?
更新资料
蓝图是一个继承蓝图类的类。 所以我实现了这个方法
def my_decorator(self, fn):
@wraps(fn)
def decorator(*args, **kwargs):
value = kwargs['value']
# do stuff with value
return fn(*args, **kwargs)
return decorator
但值仍然是未知键...
装饰器在导入时执行,它们实质上是语法糖:
@foo(bar)
def baz():
return 'w00t!'
相当于
def baz():
return 'w00t!'
baz = foo(bar)(baz)
因此,在上面的示例中,变量bar
在作为参数传递给装饰器之前,必须存在于此模块的全局范围内。 那就是你告诉你的错误。
更新资料
根据下面的讨论,问题中的代码应拦截传递给view函数的值并对其进行处理。 这是一个演示它的示例:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.