在Python和Google App Engine中重定向用户

7
我尝试在用户登录后进行简单的重定向。我认为我可以使用 print "Location:..." 方法,但这似乎行不通。
class MainPage(webapp.RequestHandler):
    def get(self):

        ip = self.request.remote_addr
        log = Log()
        log.ip_address = ip
        log.put()
        print "Location:http://www.appurl.com"

放置打印语句会如何重定向您? - crodjer
2
呼喊我愚蠢的尝试会如何帮助我? - Ian McIntyre Silber
2
这并不愚蠢,你必须从某个地方开始,当我第一次开始使用AppEngine时,我也尝试了同样的事情。好消息是Google提供了很棒的文档。 :) - Alex
@dcrodjer:如果他正在打印标题,那就有意义。 - mpen
就此而言,“print”可以正常工作,但您不应该从WSGI应用程序内部直接输出到标准输出。每当您看到“print”语句时,都是错误的做法。 :) - Nick Johnson
2个回答

16

RequestHandler有一个名为redirect()的方法,你可以使用它。它需要两个参数,第一个参数是要重定向到的URL,第二个参数是一个布尔值。如果你传递了真值,它将发送一个状态码301来表示永久重定向;如果你没有传递它一个明确的值,它将默认发送一个状态码302来表示临时重定向。

类似这样:

class MainPage(webapp.RequestHandler):
    def get(self):

        ip = self.request.remote_addr
        log = Log()
        log.ip_address = ip
        log.put()
        self.redirect("http://www.appurl.com") # replaced this -> print "Location:http://www.appurl.com"

1
另一个选择是直接在appengine_config.py上完成。
例如,如果你想将所有内容重定向到 "http://www.google.com",可以添加以下内容:
def webapp_add_wsgi_middleware(app):

    return webapp.WSGIApplication([('/*', webapp.RedirectHandler.new_factory('http://www.google.com', permanent=True))], debug=True)

例如,如果您想根据主机执行某些操作,可以执行以下操作:
def webapp_add_wsgi_middleware(app):

    if 'mydomain.com' in os.environ.get('HTTP_HOST'):
        return webapp.WSGIApplication([('/*', webapp.RedirectHandler.new_factory('http://www.google.com/', permanent=True))],
    debug=True)
    else:
        return app

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接