如何创建应用程序引擎类@login_required装饰
问题描述:
我有这个初始化函数,如果用户已经登录这台self.user如何创建应用程序引擎类@login_required装饰
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")
当我试图例子住所,我得到'NameError: name 'login_required' is not defined'
我缺少什么?
答
我发现,以了解装饰器如何工作本页面有用:http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/
你的装饰需要执行它需要的任何任务后调用处理程序。这是我目前的login_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
在这种情况下,装饰应用到实例方法,而不是类,即:
class Test(MainHandler)
@login_required
def get(self):
...
有很多毛病,您对代码张贴,但它不会给你显示的错误(你不称为任何名为“认证”)。 – 2014-10-18 20:03:00
没错,那是一个错误。 login_required之前称为authenticate。已经改变了。 – 2014-10-18 20:09:33