0

在决定显示什么内容之前需要做一些身份验证检查。理想情况下,我希望有一个限制性的基本处理程序,它将实现“之前”挂钩,可以显示替代内容,而不是请求的内容。

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

2 回答 2

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
于 2013-08-06T13:06:46.450 回答
0

有几种方法

一种是设置 wsgi 中间件 - 包装你的应用程序,它可以在实际调用处理程序之前检查身份验证。 http://pythonweb.org/projects/webmodules/doc/0.5.3/html_multipage/lib/example-command-program-flow.html

在调用方法之前检查 auth 的方法上交替使用装饰器

然后任何一个选项都可以返回正确的状态,您的实际处理程序不需要担心这种逻辑。

于 2013-08-06T14:03:40.357 回答