所以我知道你可以使用以下内容从一个继承自webapp2.RequestHanlder
的类中重定向GAE:
class Foo(webapp2.RequestHandler):
def get(self):
self.redirect('https://google.com')
虽然这有效,但能够在课堂外进行重定向会很棒。
例如,假设您有以下代码是全局函数 - 即它不存在于类中:
def fetch_url(url, method=urlfetch.GET, data=''):
"""Send a HTTP request"""
result = urlfetch.fetch(url=url, method=method, payload=data,
headers={'Access-Control-Allow-Origin': '*'})
return result.content
如果您可以从该功能重定向,则可以检查状态代码并重定向到错误页面。 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']
那么有没有办法在课外进行重定向?
答案 0 :(得分:1)
您可以创建自己的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")
一样简单。