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

Flask框架下HTML按钮无法正确重定向至主页URL问题咨询

解决方案:Flask实现启动/停止任务的按钮交互

我来帮你把这套启动/停止数据采集任务的交互逻辑完整落地,直接就能跑通的示例如下:

前端HTML部分

你可以把这两个按钮放在一个HTML页面里(比如项目根目录下的templates/index.html):

<!DOCTYPE html>
<html>
<head>
    <title>任务控制面板</title>
</head>
<body>
    <!-- 启动数据采集按钮 -->
    <form action="/data" method="POST">
        <input type="submit" name="Start Data Collection" value="Start Data Collection"/>
    </form>

    <br>

    <!-- 停止任务按钮 -->
    <form action="/stop" method="POST">
        <input type="submit" name="Stop" value="Stop"/>
    </form>
</body>
</html>

Flask后端完整代码

这里要注意:如果直接在路由里执行任务会阻塞Flask主线程,导致无法响应停止请求,所以我们用线程来异步执行任务,同时用全局变量控制任务启停:

from flask import Flask, render_template
import threading
import time

app = Flask(__name__)

# 全局变量控制任务状态(生产环境建议用锁或更可靠的状态管理保证线程安全)
is_task_running = False
task_thread = None

def data_collection_task():
    """模拟你的数据采集逻辑"""
    global is_task_running
    while is_task_running:
        print("正在采集数据...")
        # 这里替换成你实际的采集代码,比如调用接口、读写数据库等
        time.sleep(1)
    print("数据采集任务已停止")

@app.route('/')
def index():
    # 返回包含控制按钮的页面
    return render_template('index.html')

@app.route('/data', methods=['POST'])
def start_collection():
    global is_task_running, task_thread
    if not is_task_running:
        is_task_running = True
        # 启动新线程执行采集任务,避免阻塞主线程
        task_thread = threading.Thread(target=data_collection_task)
        task_thread.start()
        return "数据采集任务已启动!"
    return "任务已经在运行中了哦~"

@app.route('/stop', methods=['POST'])
def stop_collection():
    global is_task_running, task_thread
    if is_task_running:
        is_task_running = False
        # 等待线程结束(可选,根据你的业务需求调整)
        if task_thread is not None:
            task_thread.join()
        return "数据采集任务已停止!"
    return "当前没有运行中的任务哦~"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

关键注意点

  1. 线程异步执行:必须把数据采集任务放到单独线程里,否则Flask主线程会被阻塞,无法处理停止按钮的请求。
  2. 状态安全:如果是多用户并发场景,建议给全局变量加threading.Lock(),避免状态修改出现冲突。
  3. 模板路径:使用render_template时,需要在项目根目录创建templates文件夹,把HTML文件放入其中;如果不想用模板,也可以直接把HTML字符串写在路由里返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:05:06