Python 如何为应用程序引擎类创建@login\u必需的装饰器
我有这个初始化函数,如果用户已经登录,它会设置self.userPython 如何为应用程序引擎类创建@login\u必需的装饰器,python,google-app-engine,Python,Google App Engine,我有这个初始化函数,如果用户已经登录,它会设置self.user class MainHandler(webapp2.RequestHandler): def initialize(self, *a, **kw): webapp2.RequestHandler.initialize(self, *a, **kw) uid = self.read_secure_cookie('user_id') self.user = uid and Us
class MainHandler(webapp2.RequestHandler):
def initialize(self, *a, **kw):
webapp2.RequestHandler.initialize(self, *a, **kw)
uid = self.read_secure_cookie('user_id')
self.user = uid and User.by_id(int(uid))
我想创建一个装饰器,在用户未登录时将其重定向到登录页面:
def login_required(cls):
if not self.user:
self.redirect("/login")
@login_required
class Test(MainHandler)
def get(self):
self.write("this will only display if I am logged in")
当我尝试示例住所时,我得到了'namererror:name'login\u required'未定义“
我遗漏了什么?为了了解装饰师的工作原理,我发现这一页很有用: 您的装饰程序需要在执行任何需要调用的任务后调用处理程序。以下是我当前登录所需的装饰器定义的变体:
def login_required(handler):
def check_login(self, *args, **kwargs):
userToken = auth.get_auth().get_user_by_session()
if not userToken:
logging.info('No user found for session: login required')
return self.redirect(LOGIN_URL, abort=False)
return handler(self, *args, **kwargs) # Call the handler method
return check_login
本例中的装饰器应用于实例方法,而不是类ie:
class Test(MainHandler)
@login_required
def get(self):
...
您发布的代码有很多错误,但它不会给出您显示的错误(您不会调用任何名为“authenticate”的东西)。对,这是一个错误。先前调用了所需的登录名。我们已经改变了这一点。