我有时不确定如何使用webapp2.redirect。
有没有时候我应该使用
self.redirect("/blah")
而不是return self.redirect("/blah")
这是我对时间线的理解/猜测:(有时我对响应对象是否执行某些操作或 webapp2 是否执行此操作感到困惑)
- 我访问了我的多线程网站 www.mysite.com/name/robert,chrome 发送了一个 GET 请求(假设这个请求是一个文本文件)
- webapp2 抓取这个“文本文件”并将其转换为 webapp2.Request。webapp2 还创建了一个新的 webapp2.Response。
- 以某种方式将请求 url 提供给路由器进行匹配(通过 webapp2 或响应)。一个适当的 RequestHandler 被实例化。使用适当的参数调用 RequestHandler 的 get() 方法。
- 在此期间,只有一个请求和一个响应。
- get() 方法调用 response.out.write("hello world") 将“hello world”添加到响应正文?
- get() 方法调用 self.redirect('/foo')
- 事情发生了
- get() 方法调用 self.out.write("bye world")
- 响应被发送到客户端,其中包含 hello world、添加了什么食物、再见世界
初始 get 函数的示例:
def get():
self.write('hello world')
self.redirect('/foo')
self.write('bye world')
什么“事情发生了”?我想路由器找到/foo/的RequestHandler。在调用 foo 的 requestHandlers get() 方法之前对 Request 和 Response 做了哪些修改。请求是否被删除并被新的 GET 请求替换?回复是否被删除并替换为新回复?初始请求处理程序中存在哪些上下文?代码执行是否返回到初始请求处理程序的 get 方法,如果是,是否已恢复可能存在的上下文?
抱歉,如果这有点拗口,我已经尝试解释我想知道的内容:)
也许询问一些使用重定向的用例(做和不做)会更容易。