无法在方法内部呈现网页

时间:2015-11-24 10:17:30

标签: python jinja2 webapp2

我正在编写一个GAE应用程序(并使用webapp2框架和jinja2作为模板渲染器),我希望用装饰器包装所有的GET和POST方法。装饰器检查用户是否有权访问此页面,如果没有,则应显示错误消息。

问题在于,在装饰器内部,我无法使用 self.response.write 来显示错误消息,因为装饰器是一种方法,它不会''扩展''webapp2。 RequestHandler。

这是装饰器代码:

def checkpriv(classNo, errorMsg):
    def wrapFunction(method):
        if checkprivileges(classNo):
            return method
        else:
            logging.info(users.get_current_user().nickname() + errorMsg)
            # NEED TO DISPLAY ERROR MESSAGE HERE
    return wrapFunction

我尝试创建一个扩展webapp2.RequestHandler并在装饰器内初始化它的对象的类,但是我得到了这个错误404 GET方法是不允许的。

1 个答案:

答案 0 :(得分:0)

为什么不创建覆盖webapp2 init或dispatch的BaseHandler。这样你就不需要(或忘记)一个装饰者。

文档init overridedispach override

我使用调度覆盖来创建基于角色的访问控制。

class BaseHandler(webapp2.RequestHandler):
    """ webapp2 base handler """

    def dispatch:

        # abort or dispatch and pass an argument to the handler
        self.request.route_kwargs['user_access'] = UserAccess(self.request)
        super(BaseHandler, self).dispatch()


class YourHandler(BaseHandler):

    def get(self, user_access, ..):

        ....