解释了webapp2重定向



我有时不确定如何使用webapp2.redirect.

有没有一段时间我应该使用self.redirect("/blah")而不是return self.redirect("/blah")

以下是我对时间线的理解/猜测:(有时我对响应对象是做了什么还是webapp2做了什么感到困惑)

  1. 我访问了我的多线程网站www.mysite.com/name/robert,chrome发送了一个GET请求(假设此请求是一个文本文件)
  2. webapp2获取这个"文本文件"并将其转换为webapp2.Request。webapp2还生成了一个新的webapp2.Response
  3. 不知何故,请求url被提供给路由器进行匹配(或者通过webapp2或通过响应)。合适的RequestHandler是实例化。使用调用RequestHandler的get()方法适当的论据
  4. 在这段时间里,只有一个请求响应
  5. get()方法调用response.out.write("helloworld")添加向响应机构发送"你好世界"
  6. get()方法调用self.redirect('/foo')
  7. 事情发生
  8. get()方法调用self.out.write("再见世界")
  9. 响应将发送给客户端,其中包含helloworld、添加了什么食物、byeworld

初始get函数的示例:

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

发生了什么"事情"?我想路由器会找到/foo/的RequestHandler在调用foo的requestHandlers get()方法之前,对请求和响应进行了哪些修改。请求是否已被删除并替换为新的GET请求?响应是否已删除并替换为新响应?初始请求处理程序中还有什么上下文?代码执行是否返回到初始请求处理程序get方法?如果是,是否恢复了可能存在的上下文?

对不起,如果这有点含糊其辞,我试着解释我想知道的:)

也许询问一些使用重定向的用例(注意事项和不注意事项)会更容易。

redirect方法实际上只是设置响应状态和响应位置头的一些有用的错误。在将响应发送到重定向之后的客户端之前,什么都不会发生。如果重定向后有更多不想运行的代码,那么您只需要返回调用重定向的结果,以避免运行更多的代码。

来源很容易阅读。。http://webapp2.readthedocs.io/en/latest/_modules/webapp2.html#redirect

最新更新