在 Flask MethodView 的派生 类 中修饰方法
Decorate methods in derived classes of Flask MethodView
我认为我可以通过如下装饰 __enter__
要求所有派生视图都需要登录:
from flask.views import MethodView
from flask.ext.login import login_required
class LoggedInView(MethodView):
@login_required
def __enter__(self):
pass
如果我添加一些日志记录,结果 __enter__
未输入。同样,__exit__
不会发生。
这是怎么回事?
我可以修改样式来装饰一些其他功能,但是必须在派生视图中调用 super()
,这违背了这样做的初衷。
除了继承 LoggedInView
之外,如何在不对视图进行任何操作的情况下强制执行此修饰?
要装饰 MethodView
实例的方法,您必须添加一个 decorators
class 变量,其中包含要调用的装饰器列表。见 documentation.
对于您的示例,它将是:
from flask.views import MethodView
from flask.ext.login import login_required
class LoggedInView(MethodView):
decorators = [login_required]
def get(self):
pass
def post(self):
pass
# ...
请注意,装饰器应用于所有已定义的方法。
我认为我可以通过如下装饰 __enter__
要求所有派生视图都需要登录:
from flask.views import MethodView
from flask.ext.login import login_required
class LoggedInView(MethodView):
@login_required
def __enter__(self):
pass
如果我添加一些日志记录,结果 __enter__
未输入。同样,__exit__
不会发生。
这是怎么回事?
我可以修改样式来装饰一些其他功能,但是必须在派生视图中调用 super()
,这违背了这样做的初衷。
除了继承 LoggedInView
之外,如何在不对视图进行任何操作的情况下强制执行此修饰?
要装饰 MethodView
实例的方法,您必须添加一个 decorators
class 变量,其中包含要调用的装饰器列表。见 documentation.
对于您的示例,它将是:
from flask.views import MethodView
from flask.ext.login import login_required
class LoggedInView(MethodView):
decorators = [login_required]
def get(self):
pass
def post(self):
pass
# ...
请注意,装饰器应用于所有已定义的方法。