应用引擎:如何从类外部重定向

2024-06-06 21:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我知道您可以在GAE中从继承自webapp2.RequestHanlder的类中使用以下方法重定向:

class Foo(webapp2.RequestHandler):
    def get(self):
        self.redirect('https://google.com')

虽然这是可行的,但是能够在类之外执行重定向将是非常好的。在

例如,假设您有以下代码是全局函数-即它不存在于类中:

^{pr2}$

如果可以从函数重定向,则可以检查状态代码并重定向到错误页。E、 g

if result.status_code != 200:
    urllib2.urlopen('/error_page.html')
    return

不幸的是,上面的代码在GAE中什么也不做,生成了以下警告。在

WARNING  2014-05-22 21:58:24,364 urlfetch_stub.py:482] Stripped prohibited headers from URLFetch request: ['Host']

那么有没有一种方法可以在类之外执行重定向呢?在


Tags: 方法函数代码httpsselfgetfoodef
1条回答
网友
1楼 · 发布于 2024-06-06 21:20:59

您可以创建自己的Exception子类来处理重定向。在

我这样做的方法是创建我自己的webapp2.RequestHandler子类,它覆盖handle_exception方法(See the docs

class RedirectError(Exception):
    def __init__(self, new_url):
        self.new_url = new_url

class MyWebappFramework(webapp2.RequestHandler):
    def handle_exception(self, exception, debug_mode):
        if isinstance(exception, RedirectError):
            self.redirect(exception.new_url)
        else:
            super(MyWebappFramework, self).handle_exception(exception, debug_mode)

使用此功能,您实际上可以创建范围广泛的自定义异常,以轻松管理预期。例如,您还可以创建一个NotFound异常,将状态代码设置为404并呈现“找不到页面”消息。在

要使重定向发生,请引发RedirectError。在

简单到raise RedirectError("http://www.google.com")。在

相关问题 更多 >