在Flask中重定向到外部域

时间:2013-11-03 05:47:04

标签: python redirect flask

我正在编写一个非常简单的烧瓶应用程序(URL缩短程序),它应该能够将某些请求重定向到其他任意域。但是,我遇到了重定向问题。例如,这个精简版本不起作用:

from app import app, db
from flask import abort, redirect

@app.route('/')
def index():
    return "Hello, world"

@app.route('/favicon.ico')
def favicon():
    abort(404)

@app.route('/<slug>')
def redirect(slug):
    return redirect('http://google.com/')

也许很天真,我希望这会重定向到google.com,但是重定向似乎被Flask“捕获”了,并且它尝试通过重定向处理程序(例如redirect(slug="http://google.com/"))将重定向的URL路由回来直到它通过递归和错误消耗所有堆栈空间。我似乎无法弄清楚为什么会发生这种情况,或者如何解决它,但我真的很感激指针朝着正确的方向发展。

1 个答案:

答案 0 :(得分:2)

问题在于这个功能:

@app.route('/<slug>')
def redirect(slug):
    return redirect('http://google.com/')

您将函数命名为redirect(),因此在调用return redirect(...)时函数的范围内,这被解释为递归调用,因为视图函数会影响Flask的同名函数。并且您传递的URL将映射到递归调用中的slug参数。

将视图函数的名称从redirect()更改为其他内容,您的代码将正常运行。