相关文章推荐
开朗的毛衣  ·  Python中使用 logging 和 ...·  1 年前    · 
鬼畜的椰子  ·  spring security5.x ...·  1 年前    · 
难过的炒饭  ·  AngularMaterial的Mat-Ca ...·  1 年前    · 

从HTML/Flask运行Python函数

2 人不认可

我一直在用头撞墙来解决这个问题。我正在写一个应用程序,理想情况下,当HTML中的onclick发生时,运行FLASK中的一个python脚本。问题是,我所做的一切似乎都不起作用。我不再出错了,但程序却不能运行。

我试着通过AJAX访问Python脚本,我试着在HTML中通过jscript调用Python脚本,我为Python脚本创建了一个单独的文件,而不是通过Flask运行它....

</style>
<h1>Book Roulette</h1>
<h2>Discover Something New</h2>
<h3>Click the image to download a surprise book</h3>
<a href="/static/gut.py"> <button class="button" style="background: url(/static/images/stack.jpg)" onclick="button();" action="/button"></a>
</button>
<script>
$(function() {
    $('button').click(function() {
        $.ajax({
            url: 'static/gut.py',
            data: $('form').serialize(),
            type: 'POST',
            success: function(response) {
                console.log(response);
            error: function(error) {
                console.log(error);
</script>
</body>
</html>

以下是我的Flask/Python文档

from flask import Flask, render_template
from gutenberg.acquire import load_etext
from gutenberg.cleanup import strip_headers
import random
app = Flask(__name__, static_url_path='/static')
@app.route('/books')
def books():
    return render_template("main.html")
@app.route('/button', methods=["GET", "POST"])
def button():
    f = open("GutProject.txt", "w")
    for x in range(1):
        y = (random.randint(0, 59000))
        text = strip_headers(load_etext(y)).strip()
        f.write(text)
if __name__ == "__main__":
    app.run(debug=True)

我想做的是,当我点击我的HTML按钮,在用户的电脑上生成一个新的文件时,让Python代码运行。到目前为止,我已经达到了这样的程度:当我点击按钮的时候,什么都没有发生。

1 个评论
你在浏览器的 "开发工具 "中看过吗?你可以按F12键来打开它们。转到 "控制台 "标签。是否有任何错误信息?
python
jquery
html
flask
Jordan Brandes
Jordan Brandes
发布于 2019-08-11
3 个回答
paupaulaz
paupaulaz
发布于 2019-08-11
0 人赞同

你实际上想在这里实现的是创建一个客户端/服务器项目。你的html是你的客户端或前端,而python是你的服务器,或后端。让两者进行交流的方法是通过一个api。然后,你应该事先启动你的Flask应用,而不是从前端调用脚本,而是将请求发送到正确的端点。假设你在本地机器上运行Flask,端口是默认的,那就在前端那边试试把 url: 'static/gut.py' 替换成下面的值。 url: 'http://localhost:5000/button'

每当你点击你的按钮,这应该会触发相关的功能。

$(function() { $('button') .click(function() { $.ajax({ url:' localhost:5000/button ', data: $('form').serialize(), type: 'POST', success: function(response) { console.log(response); }, error: function(error) { console.log(error); } }); }); });
在打开html页面之前,你有没有从终端启动你的flask服务器?如果有,终端上的输出是什么?
以下是我加载页面并点击按钮时的全部输出结果
* 服务于Flask应用 "app"(懒惰加载) * 环境:生产 警告:不要在生产环境中使用开发服务器。 请使用生产型WSGI服务器。 * 调试模式:开 * 运行于 127.0.0.1:5000 (按CTRL+C退出) * 重新启动,有状态 * 调试器已激活! * 调试器密码:284-389-406 127.0.0.1 - - [10/Aug/2019 12:46:18] "GET /books HTTP/1.1" 200 -
Sergio Pulgarin
Sergio Pulgarin
发布于 2019-08-11
0 人赞同

对于你想要达到的功能,你需要在Flask应用之外再增加一个服务器。因为 POST 的请求需要由一个已经运行的Web应用来处理,如果没有第二个服务来接收这个 POST 的请求,并将你的Flask应用作为一个子进程来运行,就不可能实现你的目标。

我怎样才能做到这一点呢?
它可以是一个Flask应用程序,在一个路由里面,使用 subprocess 模块来催生第二个Flask应用程序的进程(见 stackoverflow.com/questions/24787106/... ).在任何情况下,这个用例听起来有点落后,所以我想探索其他的方法。我不能提出任何建议,因为我不知道这里的最终目标是什么。
Jordan Brandes
Jordan Brandes
发布于 2019-08-11
0 人赞同

更新:我实际上是在不使用jquery或PHP的情况下设法解决了这个问题。

</script>