我认为通过装饰__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
之后的视图中没有任何工作,我如何强制执行此修饰?
答案 0 :(得分:3)
要装饰MethodView
实例的方法,您必须添加一个decorators
类变量以及要调用的装饰器列表。请参阅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
# ...
请注意,装饰器将应用于所有已定义的方法。