Python Can’;无法在方法内部呈现网页

Python Can’;无法在方法内部呈现网页,python,jinja2,webapp2,Python,Jinja2,Webapp2,我正在编写一个GAE应用程序(并使用webapp2框架和jinja2作为模板渲染器),我希望用一个装饰器包装我的所有GET和POST方法。装饰程序检查用户是否有权访问此页面,如果没有,则应显示一条错误消息 问题是,在decorator内部,我无法使用self.response.write显示错误消息,因为decorator是一个方法,它不会“扩展”webapp2.RequestHandler 以下是装饰器代码: def checkpriv(classNo, errorMsg): def

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

问题是,在decorator内部,我无法使用self.response.write显示错误消息,因为decorator是一个方法,它不会“扩展”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的类,并在decorator内初始化该类的一个对象,但我发现这个错误404 get方法是不允许的。

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

文档和

我使用dispatch 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, ..):

        ....