webapp2重定向解释

时间:2012-09-14 01:33:40

标签: 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”)添加 “你好世界”到响应机构?
  6. get()方法调用self.redirect('/ foo')
  7. 发生了什么
  8. get()方法调用self.out.write(“bye world”)
  9. 响应被发送到包含hello world的客户端,添加了什么食物,再见世界
  10. 初始get函数的示例:

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

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

    抱歉如果这有点拗口,我试着解释一下我想知道的事情:)

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

1 个答案:

答案 0 :(得分:11)

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

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