【问题标题】:Redirecting to an external domain in Flask重定向到 Flask 中的外部域
【发布时间】:2013-11-03 05:47:04
【问题描述】:

我正在编写一个非常简单的烧瓶应用程序(一个 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 路由回,直到它通过递归和错误耗尽所有堆栈空间。我似乎无法弄清楚为什么会发生这种情况,或者如何解决它,但我真的很感激一个指向正确方向的指针。

【问题讨论】:

    标签: python redirect flask


    【解决方案1】:

    问题出在这个函数上:

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

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

    将视图函数的名称从 redirect() 更改为其他名称,您的代码就可以正常工作了。

    【讨论】:

    • @Miguel 谢谢我也犯了同样的错误,愚蠢!刚刚在这上面浪费了 1 个小时。
    • @Miguel 谢谢! 6 年后,回复让我摆脱了这个难以理解的愚蠢问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2021-07-23
    • 2012-12-08
    • 2018-06-17
    • 2011-02-20
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多