首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >运行python代码,该代码在单击按钮时通过javascript中的flask提供。

运行python代码,该代码在单击按钮时通过javascript中的flask提供。
EN

Stack Overflow用户
提问于 2018-09-21 23:51:53
回答 2查看 70关注 0票数 0

我正在尝试运行一些python代码,这些代码是通过Flask提供的,我希望这些python代码将一个值返回给javascript,这样我就可以在那里使用它。

在这种情况下,我在HTML中有一个按钮,当我点击它时,我想要一个python代码(通过Flask提供)运行,它应该返回"Hello“,我可以在HTML中使用它,就像显示它或存储它的另一个变量一样。

以下是我的代码:

ajax.html

代码语言:javascript
复制
<!doctype html>
<html>
<head>
    <title>country</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

</head>
<body>

<button id="btn" onclick="flaskcall()">display</button>
<p id="display-here">Display here {{ temp }}</p>
<script>


function flaskcall()
{
    $.ajax(
  {
     type: "POST",
     url: "/hello",
     dataType: "html",
     success: function(msg)
     {
         console.log(msg);
             $("#display-here").html(msg);

     },
    error: function (xhr, status, error) {
        console.log(error);
    }

});
}

 </script>

</body>

</html>

flaskajax.py

代码语言:javascript
复制
from flask import Flask

app = Flask(__name__)
@app.route("/hello", methods=['GET', 'POST'])


def Hello():
    message = "Hello"
    return render_template("ajax.html", temp=message)

if __name__ == '__main__':
    app.run(debug=True)

webserver.py

代码语言:javascript
复制
import SimpleHTTPServer
import SocketServer

PORT = 8888

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

我正在运行webserver.py,正在导航到http://localhost:8888/ajax.html,当我按下display按钮时,我看到了这个错误

Error Message

我甚至不知道我这样做的方式是否正确,我也不理解GET和POST方法。如果有人理解我实际上想做什么,如果他们能向我解释幕后到底发生了什么,我将不胜感激。如果您需要任何其他信息,请留言。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-22 00:16:49

这是你的第二台服务器,使用flask:

代码语言:javascript
复制
from flask import Flask, Response

app = Flask(__name__)


@app.route("/ajax")
def Hello():
    resp = Response("Hello")
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp


if __name__ == '__main__':
    app.run(debug=True)

最重要的是如图所示设置头部,否则浏览器将不允许AJAX请求,因为它发往不同的服务器。

在您的index.html中,暂时将以下代码放入<body>中:

代码语言:javascript
复制
<h1>Hello from Flask.</h1>
<button id="btn" onclick="flaskcall()">display</button>
<p id="display-here"></p>
<script>
    function flaskcall() {
        fetch("//localhost:5000/ajax").then(res => res.text()).then(res => {
            document.querySelector("#display-here").textContent = res;
        });
    }
</script>

该函数将使用AJAX从flask服务器请求GET /ajax,服务器将回复Hello。然后将响应插入到文档中(为了安全起见,使用非jQuery版本)。

票数 0
EN

Stack Overflow用户

发布于 2018-09-22 00:18:08

看起来您正在运行webserver.py,这与您的flask应用程序没有任何关系。

您应该这样运行它:

python flaskajax.py

它将运行自己的you服务器并监听default 5000,您可以浏览http://localhost:5000/hello

但是,您的代码有一些问题,您忘记导入render_template。这就是它应该是什么样子,

代码语言:javascript
复制
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/hello", methods=['GET', 'POST'])


def Hello():
    message = "Hello"
    return render_template("ajax.html", temp=message)

if __name__ == '__main__':
    app.run(debug=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52447266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档