python – 一个Flask装饰器怎么有参数?
发布时间:2021-01-17 07:29:52 所属栏目:Python 来源:互联网
导读:我以与这里相同的方式实现了装饰器 How to make a python decorator function in Flask with arguments (for authorization) 但问题依然未解决… 我有这个功能与装饰器 @blueprint.route(var)@blueprint.my_decorator(var)def function(var):
|
我以与这里相同的方式实现了装饰器
我有这个功能与装饰器 @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 (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
