【问题标题】:How do I redirect within Flask without changing the URL如何在不更改 URL 的情况下在 Flask 中重定向
【发布时间】:2020-11-04 08:23:50
【问题描述】:

如何在不更改 URL 的情况下在 Flask 中重定向?我已经寻找了一段时间,但没有找到好的解决方案。 .htaccess 和 nginx 还有其他线程,但不适用于这种情况

我唯一的解决办法是:

# url_root is currently http://127.0.0.1:5000/
# args = t/Some%20text?p=preset

res = requests.get(request.url_root + args)
return res.text, res.status_code, res.headers.items()

它本质上只是访问 url,然后复制数据并发送它。虽然这确实有效,但速度很慢,在本地服务器上等待时间约为 300-400 毫秒。

我觉得必须有某种方法来重新路由请求,但我找不到它。

编辑:我不是在寻找基本的 Flask 代理,因为它与我已经在做的事情相同。它包含我想要避免的相同瓶颈。我想要一些可以在 Flask 中调用不同页面的东西。

【问题讨论】:

  • 这能回答你的问题吗? Proxying to another web service with Flask
  • 不,据我所知。您发送的链接基本上与我已经找到的相同。我想要在 Flask 中重新路由的东西,而不是发出 GET 请求,等待它完成,然后发送数据。
  • flask 不是为此而创建的 - 而是用于生成页面。通常你应该用 nginx/apache 运行它,它应该重定向它(甚至是服务器静态文件),因为它使它更快。但即使是 nginx/apache 也必须像在您的代码中一样读取并发送它。顺便说一句,如果这是同一应用程序中的 url,则不要使用requests,而是直接运行生成此页面的函数。
  • 顺便说一句:我不知道这是否适合您,但您可以发送带有 <iframe> 的 HTML 以加载其他页面 - 然后您仍然拥有相同的 url,但浏览器直接从其他页面读取服务器。
  • furas,你有一个例子说明如何从另一个函数中调用函数(如果可能的话,包括参数)?因为这听起来正是我想要的。

标签: python python-3.x flask get


【解决方案1】:

我最终做了以下事情:

@app.route('/t/<urltext>', defaults={'args': None})
def index(urltext, args):
    # Stuff and things

# later...
@app.route('/l/<urlcode>')
def little(urlcode):
    # Processing urlcode
    return index(urltext=text, args=args)

它基本上只是避免了争论的问题,但它确实有效

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2013-08-11
    • 1970-01-01
    • 2013-10-12
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多