2013-08-06 31 views
0

在决定要显示的内容之前,需要进行一些身份验证检查。理想情况下,我想有一个限制性的基本处理程序,它会实现“before”挂钩,它可以显示替代内容,而不是请求的内容。如何实现可以输出替代响应的'before'钩子?

class Restrictive(webapp2.RequestHandler): 
    def __init__(self, *args, **kwargs): 
     if not self.is_logged_in(): 
      self.response.write('not logged in') 
      self.abort(200) 
    def is_logged_in(self): 
     return False 

但是,这不会输出响应,只有标题。中止请求的处理程序并显示替代内容的正确方法是什么?

谢谢。

回答

4

我写了这个装饰器一次。

def authenticated(handler): 
    """ 
     Decorator for checking if there's a user associated with the current session. 
     Will also fail if there's no session present. 
    """ 
    def check_login(self, *args, **kwargs): 
     if not self.is_logged_in(): 
      self.response.write('not logged in') 
      return self.error(403) 
     else: 
      return handler(self, *args, **kwargs) 
    return check_login 

然后,您可以装饰您的方法,如果他们需要进行身份验证。

class MyHandler: 
    @authenticated 
    def get(self): 
     pass 
+0

感谢您的信息。不过,我更感兴趣的是刷新响应并阻止请求的处理程序执行。 –

+0

'error()'将刷新响应。 –

+0

当我尝试用这种方式编写装饰器时,我只是'不能调用NoneType' – bgenchel

相关问题