首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Flask将数据从JS发送到Python?

如何使用Flask将数据从JS发送到Python?
EN

Stack Overflow用户
提问于 2015-05-01 21:01:46
回答 3查看 57.5K关注 0票数 22

我正在用Flask制作一个网站,我希望能够使用页面上的数据来执行python代码。我知道我可以简单地使用表单,但它是一个在接收用户输入时不断更新的单一页面,每次发生事情时都让它重新加载页面,这将是一个巨大的痛苦。我知道我可以在javascript中执行{{ function() }},但是如何使用js变量在javascript中执行{{ function(args) }}呢?到目前为止,我唯一能想到的就是用js更新一个像MongoDB这样的外部数据库,然后使用Python来读取它,但是这个过程会让网站变慢很多。

jQuery需要从Python函数获取字典对象列表,然后可以在html中使用该列表。所以我需要能够做一些事情,比如:

JS:

代码语言:javascript
复制
var dictlist = { getDictList(args) };
dictlist.each(function() {
    $("<.Class>").text($(this)['Value']).appendTo("#element");
});

Python:

代码语言:javascript
复制
def getDictList(args):
    return dictlistMadeFromArgs
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-01 22:02:16

要使用Flask将数据从Javascript转换到Python,您可以使用数据发出AJAX POST请求或AJAX GET请求。

Flask has six HTTP methods available,我们只需要GET和POST。两者都将jsdata作为参数,但以不同的方式获取。这就是两种完全不同的语言在两个不同的环境中交换数据的方式。

首先,在Flask中实例化GET路由:

代码语言:javascript
复制
@app.route('/getmethod/<jsdata>')
def get_javascript_data(jsdata):
    return jsdata

或者是一个帖子:

代码语言:javascript
复制
@app.route('/postmethod', methods = ['POST'])
def get_post_javascript_data():
    jsdata = request.form['javascript_data']
    return jsdata

第一个通过AJAX GET/getmethod/<javascript_data>访问,如下所示:

代码语言:javascript
复制
$.get( "/getmethod/<javascript_data>" );

第二个是使用AJAX POST请求:

代码语言:javascript
复制
$.post( "/postmethod", {
    javascript_data: data 
});

其中javascript_data可以是JSON dict,也可以是一个简单的值。

如果您选择JSON,请确保将其转换为Python中的字典:

代码语言:javascript
复制
json.loads(jsdata)[0]

例如:

获取:

代码语言:javascript
复制
@app.route('/getmethod/<jsdata>')
def get_javascript_data(jsdata):
    return json.loads(jsdata)[0]

帖子:

代码语言:javascript
复制
@app.route('/postmethod', methods = ['POST'])
def get_post_javascript_data():
    jsdata = request.form['javascript_data']
    return json.loads(jsdata)[0]

如果您需要执行相反的操作,将Python数据向下推送到Javascript,请创建一个简单的不带参数的GET路由,该路由返回一个JSON编码的字典:

代码语言:javascript
复制
@app.route('/getpythondata')
def get_python_data():
    return json.dumps(pythondata)

从JQuery中检索并解码:

代码语言:javascript
复制
$.get("/getpythondata", function(data) {
    console.log($.parseJSON(data))
})

json.loads(jsdata)[0]中的[0]之所以存在,是因为当您在Python语言中解码一个JSON编码的字典时,您会得到一个包含单个字典的列表,该列表存储在索引0处,因此您的JSON解码数据如下所示:

代码语言:javascript
复制
[{'foo':'bar','baz':'jazz'}] #[0: {'foo':'bar','baz':'jazz'}]

因为我们只需要里面的字典,而不是列表,所以我们得到了存储在索引0处的项,这就是字典。

还有,import json

票数 54
EN

Stack Overflow用户

发布于 2021-08-10 11:32:43

.html

代码语言:javascript
复制
... id="clickMe" onclick="doFunction();">

.js

代码语言:javascript
复制
    function doFunction()
    {
        const name = document.getElementById("name_").innerHTML

        $.ajax({
            url: '{{ url_for('view.path') }}',
            type: 'POST',
            data: {
                name: name
            },
            success: function (response) {
            },
            error: function (response) {
            }
        });

    };

.py

代码语言:javascript
复制
@app.route("path", methods=['GET', 'POST'])
def view():
    name = request.form.get('name')
    ...
票数 3
EN

Stack Overflow用户

发布于 2022-01-14 16:19:54

我是个编程新手,但你可以试试:

index.html

代码语言:javascript
复制
<script>
var w = window.innerWidth;
var h = window.innerHeight;
document.getElementById("width").value = w;
document.getElementById("height").value = h;
</script>
代码语言:javascript
复制
<html>
  <head>
    <!---Your Head--->
  </head>
  <body>
    <form method = "POST" action = "/data">
      <input type = "text" id = "InputType" name = "Text">
      <input type = "hidden" id = "width" name = "Width">
      <input type = "hidden" id = "height" name = "Height">
      <input type = "button" onclick = "myFunction()">
    </form>
  </body>
</html>

.py

代码语言:javascript
复制
from flask import Flask, request
app = Flask(__name__)
html = open("index.html").read()
@app.route("/")
def hello():
    return html
@app.route("/data", methods=["POST", "GET"])
def data():
    if request.method == "GET":
        return "The URL /data is accessed directly. Try going to '/form' to submit form"
    if request.method == "POST":
        text = request.form["Text"]
        w = request.form["Width"]
        h = request.form["Height"]
        //process your code
    return //value of your code
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29987323

复制
相关文章

相似问题

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