在Flask MethodView

时间:2015-09-30 04:42:06

标签: python flask flask-login

我认为通过装饰__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之后的视图中没有任何工作,我如何强制执行此修饰?

1 个答案:

答案 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

    # ...

请注意,装饰器将应用于所有已定义的方法。