python - 在 Flask 中使用 html 运行 python 脚本

标签 python html flask

我是 Flask 的新手,我正在尝试通过单击 html 页面中的按钮从后台运行 python 脚本。这是我的代码:

from flask import *
from functools import wraps
import sqlite3

app = Flask(__name__)
@app.route('/')
def home():
    return render_template('home.html')

@app.route('/generate')
def generate():
    return render_template('process.html')

我的process.html如下:

<html>
    <head>
        <body>
            Processing...
            <script>
                exec('python /pth to my python file/myfile.py')
            </script>
        </body>
    </head>
</html>

和home.html如下:

{% extends "template.html" %}
{% block content %}
<div class = "jumbo">
    <h2> Home</h2>
    <br/>
    <p><a href="{{ url_for('generate') }}">click me</a></p>
    <p> lorem epsum </p>
<div>
{% endblock %}

我在 linux 上工作,我不知道是否可以在 html 中使用 exec,如上所示。但是 .html 文件中的 exec 命令没有执行。我对 Flask 还是个新手,我会很感激任何关于如何让它工作的建议。

最佳答案

<script> HTML 中的标签专门用于运行客户端 JavaScript 代码。后端逻辑应该在 View 中完成。如果您只是想执行 myfile.py 中存在的一行代码, 你应该把它放在那个文件的一个函数中并使用 from myfile import functionname 导入它或者只是在 View 中显示该代码(在大多数情况下,后者是正确的方法)。例如,如果 myfile.py包含print 'Hello World!'那么你的观点应该是这样的:

from flask import *
from functools import wraps
import sqlite3

app = Flask(__name__)
@app.route('/')
def home():
   return render_template('home.html')

@app.route('/generate')
def generate():
   print 'Hello World!'
   return render_template('process.html')

如果您这样做,就不必将所有代码拆分到单独的文件中。不幸的是,模板将在代码执行后呈现,因此“正在处理...”,如您的 process.html 所示。模板将在处理后显示。就 Flask 而言,据我所知,向用户展示该过程已发生的最佳方式是重定向回页面并显示一条消息,如下所示:

@app.route('/generate')
def generate():
   print 'Hello World!'
   flash('Process complete!')
   return redirect(url_for(home))

然后在home.html你会有这样的东西(来自 Flask 0.11 Documentation ):

{% extends "template.html" %}
{% block content %}
<div class = "jumbo">
<h2> Home</h2>
<br/>
{% with messages = get_flashed_messages() %}
  {% if messages %}
    <ul class=flashes>
      {% for message in messages %}
        <li>{{ message }}</li>
      {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
<p><a href="{{ url_for('generate') }}">click me</a></p>
<p> lorem epsum </p>
<div>
{% endblock %}

如果您希望在页面上显示“正在处理...”之类的内容,那么您就需要使用 JavaScript。

希望这对您有所帮助:)

关于python - 在 Flask 中使用 html 运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40895329/

相关文章:

python - Flask reSTLess 无法构造查询

python - Matplotlib 图形以奇怪的方式显示聚合函数

python - FastAPI - 支持多个身份验证依赖项

python - 全新安装 Anaconda 和 PyCharm 控制台后将无法连接,并出现 DLL 加载失败

html - 在开始 PSD 2 XHTML 工作之前我应该​​问客户什么问题?

html - 对齐单行 CSS 上的列以创建切换标签

python - 值错误: The following arguments have not been supplied: email

python - 显示嵌套关系的最后一个对象

javascript - 使用javascript将div元素输出到文本区域

flask - Kubernetes:自动确定另一个 pod/容器的 IP 地址