You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask如何实现渲染页面后根据脚本执行结果跳转至外部站点

问题根源

你写的代码无法执行跳转是因为HTTP协议要求一个请求只能返回一次响应,当你调用return render_template(...)之后,当前请求的处理流程已经结束,后面的sleep和redirect代码完全不会被执行。而且后端的sleep只会卡住请求响应,无法实现前端展示内容后延时跳转的效果,这个逻辑必须放到前端页面实现。

解决方案

1. 调整Flask后端代码

首先修改视图逻辑,把ping命令的退出码、执行结果都传给模板,同时调整subprocess的调用方式避免命令注入风险:

import subprocess
from flask import request, render_template, redirect

@app.route("/result", methods=['POST','GET'])  
def result():
    if request.method == "POST":
        ip1 = request.form.get('ip')
        # 改用列表传参的方式调用subprocess,避免命令注入
        ping_result = subprocess.run(
            ['ping', '-c', '2', str(ip1)],
            capture_output=True,
            text=True
        )
        out = ping_result.stdout + ping_result.stderr
        ec = ping_result.returncode
        # 把退出码和输出都传给模板
        return render_template("home.html", out=out, ec=ec)
    # GET请求的逻辑可根据自身业务补充
    return redirect('/')

2. 修改home.html模板

在模板里根据退出码判断是否需要自动跳转,成功则添加延时跳转逻辑,失败则只展示错误信息:

<!DOCTYPE html>
<html>
<head>
    <title>Ping结果</title>
    {% if ec == 0 %}
    <!-- 退出码为0表示ping成功,设置3秒后跳转,url可替换为你需要的目标地址 -->
    <meta http-equiv="refresh" content="3;url=http://www.google.com">
    {% endif %}
</head>
<body>
    {% if ec == 0 %}
    <p>* ping执行成功,3秒后将自动跳转</p>
    {% else %}
    <p>* ping执行失败,错误信息如下:</p>
    {% endif %}
    <pre>{{ out }}</pre>
</body>
</html>

逻辑说明

  • ping命令的退出码0代表执行成功,非0代表执行失败,我们直接用这个状态做判断条件
  • 前端通过meta标签的refresh属性实现延时跳转,不需要额外写JS,兼容性最好
  • 整个流程只需要一次后端响应,符合HTTP协议的要求

内容的提问来源于stack exchange,提问作者shreesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:54:02