【发布时间】:2015-09-30 04:42:05
【问题描述】:
我认为我可以通过如下装饰__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 之外,我如何在不做任何工作的情况下强制执行此修饰?
【问题讨论】:
-
您希望如何调用
__enter__? -
@KlausD。调用任何方法时,例如
class Foo(LoggedInView): def get(self): pass -
不,
__enter__在with构造中使用对象时会被调用。有关详细信息,请参阅 PEP 343。 -
@KlausD。哎呀。我认为它也像我描述的推论那样起作用,但我刚刚测试过,你当然是对的。不知道我做了什么,然后它在 GAE 中工作 - 我可以像这样使用其他一些“预方法挂钩”方法吗?
-
GAE 上可能有一个特殊的包装器。我可以想象这样的东西在某些情况下很有用。
标签: python flask flask-login