2015-11-24 2 views
0

Я пишу приложение 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 не допускается.

ответ

0

Почему бы не создать BaseHandler, который переопределяет webapp2 init или dispatch. Таким образом, вам не нужно (или забыть) декоратора.

Документы init override и dispach 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, ..): 

     .... 
Смежные вопросы