我有时不确定如何使用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("helloworld")添加向响应机构发送"你好世界"
- get()方法调用self.redirect('/foo')
- 事情发生
- get()方法调用self.out.write("再见世界")
- 响应将发送给客户端,其中包含helloworld、添加了什么食物、byeworld
初始get函数的示例:
def get():
self.write('hello world')
self.redirect('/foo')
self.write('bye world')
发生了什么"事情"?我想路由器会找到/foo/的RequestHandler在调用foo的requestHandlers get()方法之前,对请求和响应进行了哪些修改。请求是否已被删除并替换为新的GET请求?响应是否已删除并替换为新响应?初始请求处理程序中还有什么上下文?代码执行是否返回到初始请求处理程序get方法?如果是,是否恢复了可能存在的上下文?
对不起,如果这有点含糊其辞,我试着解释我想知道的:)
也许询问一些使用重定向的用例(注意事项和不注意事项)会更容易。
来源很容易阅读。。http://webapp2.readthedocs.io/en/latest/_modules/webapp2.html#redirect