Как остановить выполнение после self.redirect - PullRequest
1 голос
/ 10 февраля 2012

Как остановить выполнение после self.redirect при инициализации запроса?

Метод перенаправления не останавливает / останавливает выполнение скрипта. Мой метод инициализатора вызван, но процесс продолжается в метод AnswerHandler.get(), но self.user - Нет, потому что пользователь не вошел в систему.

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def initialize(self, request=None, response=None):
        super(BaseRequestHandler,self).initialize(request, response)

        user = users.get_current_user()

        if not user:
            return self.redirect(users.create_login_url(request.uri))

        self.user = user

class AnswerHandler(BaseRequestHandler):

    def get(self):
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})

Танки!

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Я бы пошел с этим решением:

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def setAuthUser(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(request.uri))
            return False
        self.user = user
        return True

class AnswerHandler(BaseRequestHandler):
    def get(self):
        if not self.setAuthUser():
            return
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})

Я понимаю, что вы хотели бы обойти необходимость иметь 2 строки кода в каждом обработчике.

Если вы действительно этого хотитеВаш другой вариант будет:

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def get(self):
        self.user = users.get_current_user()
        if not self.user:
          self.redirect(users.create_login_url(request.uri))
          return
        self.doGet()

    def doGet(self):
        raise Exception("doGet() needs to be implemented by a subclass.")

class AnswerHandler(BaseRequestHandler):
    def doGet(self):
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})
1 голос
/ 20 августа 2015

В webapp2 есть необязательный параметр отмены:

редирект (uri, постоянный = ложный, прерывание = ложный, код = нет, тело = нет)

Взято с API здесь

0 голосов
/ 01 марта 2013

Я сделал это с помощью метода abort () и пользовательского обработчика исключений, таким образом перехватывая исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...