Python 烧瓶装饰师怎么会有参数?
我以与这里相同的方式实现了一个装饰器 但问题仍然没有解决 我有这个函数和装饰Python 烧瓶装饰师怎么会有参数?,python,decorator,flask,Python,Decorator,Flask,我以与这里相同的方式实现了一个装饰器 但问题仍然没有解决 我有这个函数和装饰 @blueprint.route('<var>') @blueprint.my_decorator(var) def function(var): do stuff 我如何解决这个问题 更新 blueprint是继承blueprint类的类。 所以我实现了这个方法 def my_decorator(self,fn): @包装(fn) def装饰器(*args,**kwargs): value=k
@blueprint.route('<var>')
@blueprint.my_decorator(var)
def function(var):
do stuff
我如何解决这个问题
更新 blueprint是继承blueprint类的类。 所以我实现了这个方法
def my_decorator(self,fn):
@包装(fn)
def装饰器(*args,**kwargs):
value=kwargs['value']
#做有价值的事
返回fn(*args,**kwargs)
返回装饰器
但该值仍然是一个uknown键…装饰器在导入时执行,它们本质上是语法糖:
@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
从functools导入包装
从烧瓶导入烧瓶,中止
app=烧瓶(名称)
def foobar(fn):
@包装(fn)
def装饰视图(*args,**kwargs):
value=kwargs['value']
#做一些有价值的事情。。。
如果值==“foobar”:
中止(400)
返回fn(*args,**kwargs)
返回视图
@应用程序路径(“/”)
@福巴
def视图(值):
返回值
那么我如何才能使var等同于“”?不确定我是否在跟踪您。你能解释一下你想用自己的装饰器实现什么吗?我想根据url变量编辑一些html元素。哦,我想我现在明白了。不,你不是这样做的。decorator接受的参数在函数定义时传递。如果您想截取视图函数得到的参数,您需要在装饰器代码中执行此操作。我将用工作示例更新我的答案以演示这一点。这不会回答问题,因为装饰师不接受任何参数。如果答案正确回答了您的问题,您应该接受答案。:)
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