您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 一个Flask装饰器怎么有参数?

5b51 2022/1/14 8:22:37 python 字数 3179 阅读 535 来源 www.jb51.cc/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

总结

以上是编程之家为你收集整理的python – 一个Flask装饰器怎么有参数?全部内容,希望文章能够帮你解决python – 一个Flask装饰器怎么有参数?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶