javascript - 如何通过单击 HTML 网页上的按钮来运行 python 脚本?

标签 javascript python html django

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

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

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

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

最佳答案

您需要设置一个网络服务器。 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 函数注册。在这里,您可以实现逻辑以对按钮按下使用react(在示例中,它将当前时间写入服务器上的 data.txt)。由于脚本在服务器上运行,而浏览器在客户端上运行,因此只有在实际上是同一台机器时才有效,即,如果您在本地将其用作程序的接口(interface)。如果您想分离服务器和客户端,您需要引入一种传输数据的方法。

现在您可以按如下方式运行 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

关于javascript - 如何通过单击 HTML 网页上的按钮来运行 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60712353/

相关文章:

javascript - Bootstrap Tour - 在一页中初始化两个游览

与 ruby​​ 代码交互时,从 stdin 读取的 Python 挂起

html - 删除正文和页脚 html 之间的奇怪空间

html css layout zoom 剧变

javascript - new x().constructor 实际上并不存在?

javascript - 我怎样才能循环一个函数?

javascript - 具体5 ccm_activateTabBar() 未登录时未定义

python - 从本地 PNG 创建 Django 文件引发 UnicodeDecodeError

python - 在 Python 中组合模块文件

html - 将悬停图像上的文本移至左侧