在决定要显示的内容之前,需要进行一些身份验证检查。理想情况下,我希望有一个限制性的基本处理程序,它将实现可以显示替代内容的“之前”钩子,而不是请求的内容。
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
但这不会输出响应,只会输出标题。中止请求的处理程序和显示替代内容的正确方法是什么?
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
有几种方法
一个是设置wsgi中间件 - 包装你的app,它可以在实际调用处理程序之前检查auth。 http://pythonweb.org/projects/webmodules/doc/0.5.3/html_multipage/lib/example-command-program-flow.html
在调用方法之前,可以在检查auth的方法上使用装饰器
任何一个选项都可以返回正确的状态,而你的实际处理程序不需要担心那种逻辑。