【问题标题】:Can’t render webpage inside method无法在方法内呈现网页
【发布时间】:2016-02-26 17:36:27
【问题描述】:

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

问题是,在装饰器内部,我不能使用 self.response.write 来显示错误消息,因为装饰器是一种方法,它不会“扩展”webapp2.请求处理程序。

装饰器代码如下:

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 method is not allowed.

【问题讨论】:

    标签: python jinja2 webapp2


    【解决方案1】:

    为什么不创建一个覆盖 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, ..):
    
            ....
    

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 1970-01-01
      • 2020-06-29
      • 2020-03-12
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多