首页 > 解决方案 > 如何通过单击 HTML 网页上的按钮来运行 python 脚本?

问题描述

我目前有一个 python 脚本,它在运行时会更新某些 CSV 文件(它会在网络上抓取并更新 CSV 文件的信息)。在我的 HTML 页面 (index.html) 中,我在 index.html 中有一个脚本标记,用于读取 CSV 文件并将其显示为网页上的表格。但是,我现在需要做的是通过按下网页上的 HTML 按钮来更新 CSV 文件。这将更新 CSV 文件,因此当我运行按钮以运行 JS 脚本时,它将更新文件中的值。

我搜索并发现使用flask和Django很难理解它们的含义(我对设置服务器一无所知)。我不想设置 Django 网页,因为我想使用我当前编写的纯 HTML 网页。

如果答案与在 HTML 中运行 python 脚本的当前标准解决方案是最新的,我将不胜感激。

请询问您是否需要更多信息。谢谢。

标签: javascriptpythonhtmldjango

解决方案


您需要设置一个 Web 服务器。Flask可用于此目的。因此,您可以创建以下脚本:

from datetime import datetime
from flask import Flask, redirect, request
app = Flask(__name__)

@app.route('/')
def index():
    with open('index.html') as fh:
        return fh.read()

@app.route('/update')
def update_file():
    with open('data.txt', 'w') as fh:
        fh.write(datetime.now().strftime('%H:%M:%S'))
    return redirect(request.referrer)

提供您的登录页面,该@app.route('/')页面存储在index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Example</title>
</head>

<body>
  <form action="/update">
    <input type="submit">
  </form>
</body>
</html>

此 HTML 页面包含一个提交按钮,该按钮引用/update. 在上面的 Web 服务器脚本中,此路由已注册到该update_file函数。在这里,您可以实现您的逻辑以对按钮按下作出反应(在示例中,它将当前时间写入data.txt 服务器上)。由于脚本在服务器上运行,而您的浏览器在客户端上运行,这仅在实际上是同一台机器时才有效,即如果您在本地使用它作为程序的接口。如果要分离服务器和客户端,则需要引入一种传输数据的方法。

现在您可以按如下方式运行 Web 服务器:

$ FLASK_APP=script.py flask run
[...]
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

现在您可以导航到上面指示的地址,您将进入登录页面。按下按钮更新文件:

$ tree .
.
├── data.txt    <-- This file gets updated.
├── index.html
├── __pycache__
│   └── script.cpython-38.pyc
└── script.py

推荐阅读