webapp2重定向解释

rob*_*ing 12 google-app-engine redirect wsgi 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("hello world")向响应体添加"hello world"?
  6. get()方法调用self.redirect('/ foo')
  7. 东西发生了
  8. get()方法调用self.out.write("bye world")
  9. 响应被发送到包含hello world的客户端,添加了什么食物,再见世界

初始get函数的示例:

def get():
    self.write('hello world')
    self.redirect('/foo')
    self.write('bye world')
Run Code Online (Sandbox Code Playgroud)

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

对不起,如果这有点拗口,我试着解释一下我想知道的:)

也许更容易要求使用重定向的一些用例(做和不做).

lec*_*tor 11

重定向方法实际上只是设置响应状态和响应位置标头的一些有用的漏洞.在将响应发送到重定向之后的客户端之前,没有任何事情发生.您可能希望返回调用重定向的结果,以避免在您不想运行的重定向之后有更多代码被运行.

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