Google app engine webapp2重定向解释

Google app engine webapp2重定向解释,google-app-engine,redirect,wsgi,webapp2,Google App Engine,Redirect,Wsgi,Webapp2,我有时不知道如何使用 有没有什么时候我应该使用 self.redirect(“/blah”)而不是返回self.redirect(“/blah”) 以下是我对时间线的理解/猜测:(有时我对响应对象是否做了什么或webapp2是否做了什么感到困惑) 我访问了我的多线程网站www.mysite.com/name/robert,chrome发送了一个GET 请求(假设此请求是文本文件) webapp2获取此“文本文件”,并将其转换为webapp2.Request。 webapp2还生成了一个新的web

我有时不知道如何使用

有没有什么时候我应该使用
self.redirect(“/blah”)
而不是
返回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”)添加 “你好,世界”回复机构
  • get()方法调用self.redirect(“/foo”)
  • 事情发生了
  • get()方法调用self.out.write(“拜拜世界”)
  • 响应被发送到包含hello world、what food added和bye world的客户端
  • 初始get函数的示例:

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

    抱歉,如果这有点过分,我已经试着解释我想知道的:)


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

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


    来源很容易阅读

    因此,客户端得到302并遵循重定向。这似乎效率低下(需要两个而不是一个请求)。如果每个人都被重定向到/login,比如说,我会认为响应会返回登录表单,并说它是在一个响应中重定向的,而不是在两个响应中重定向的方法不会被调用,直到客户端浏览器在重定向后向responses new location标头发出新请求,这意味着foos get方法甚至可以在其他服务器上调用。如果需要内部重定向,可以从代码中调用另一个处理程序方法,例如,我将更新post处理程序中的某些内容并返回self.get()作为响应。问题是,您返回的内容来自与服务器请求的不同的资源。如果这种情况可以,那么,可以。如果您执行重定向,那么浏览器(或蜘蛛)将知道它得到了什么。至于重定向和提供新的响应,浏览器不是这样工作的。要确认:是的,你将失去以太(对浏览器用户)的“hello world”和“bye world”