Обновлено перенаправление webapp2

Я иногда не уверен, как использовать webapp2.redirect.

Есть ли время, когда я должен использовать self.redirect("/blah") вместо return self.redirect("/blah")

Вот мое понимание/угадание строки времени: (иногда меня путают, если объект ответа что-то делает или если webapp2 делает это)

  • Я посещаю мой многопоточный веб-сайт www.mysite.com/name/robert, chrome отправляет GET request (позволяет предположить, что этот запрос является текстовым файлом)
  • webapp2 захватывает этот "текстовый файл" и превращает его в webapp2.Request. webapp2 также создает новый webapp2.Response.
  • каким-либо образом URL-адрес запроса передается маршрутизатору для сопоставления (либо через webapp2 или ответом). Соответствующим RequestHandler является инстанцирован. Метод getHandler get() вызывается с соответствующие аргументы.
  • В течение этого времени только один запрос и один ответ.
  • метод get() вызывает response.out.write( "hello world" ) добавление "привет мир" для тела ответа?
  • метод get() вызывает self.redirect('/foo')
  • Происходит
  • метод get() вызывает self.out.write( "bye world" )
  • ответ отправляется клиенту, содержащему мир привет, какая добавленная еда, мир bye

пример начальной функции get:

def get():
    self.write('hello world')
    self.redirect('/foo')
    self.write('bye world')

Что такое материал? Я полагаю, что маршрутизатор находит /foo/RequestHandler. Какие изменения внесены в запрос и ответ перед тем, как foo requestHandlers get() метод называется. Является ли запрос удаленным и заменен новым запросом GET? Является ли ответ удаленным и заменен новым? Какой контекст остается в исходном обработчике запросов? выполняет ли выполнение кода возврат к первому обработчику запроса, получает метод, и если это так, что восстановленный контекст?

Извините Если это немного глоток, я попытался объяснить, что я хочу знать:)

Возможно, было бы проще попросить некоторые варианты использования (do and don'ts) использования перенаправления вместо этого.

Ответ 1

Метод переадресации - это действительно просто полезный пух вокруг установки статуса ответа и ответа на заголовок местоположения. Ничего не происходит до тех пор, пока ответ не будет отправлен клиенту, который следует за перенаправлением. Вы хотели бы вернуть результат перенаправления вызовов просто, чтобы избежать запуска большего количества кода, если после перенаправления вы больше не хотите запускать.

Источник довольно легко читается. http://webapp2.readthedocs.io/en/latest/_modules/webapp2.html#redirect