在 Flask MethodView 的派生类中装饰方法

OJF*_*ord 2 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
Run Code Online (Sandbox Code Playgroud)

如果我添加一些日志记录,结果__enter__是没有输入。同样,__exit__不会发生。

这里发生了什么?

我可以修改样式来装饰一些其他功能,但是有必要调用super()派生视图,这违背了这样做的初衷。

如何在继承之外的视图中没有任何工作的情况下强制执行此装饰LoggedInView

Mig*_*uel 7

要装饰MethodView实例的方法,您必须添加一个decorators带有要调用的装饰器列表的类变量。请参阅文档

对于您的示例,它将是:

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

    # ...
Run Code Online (Sandbox Code Playgroud)

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