【问题标题】:How do I get JavaScript and Python to communicate continuously via Flask?如何让 JavaScript 和 Python 通过 Flask 持续通信?
【发布时间】:2019-11-25 18:03:31
【问题描述】:

我对 JavaScript、Python 和 Web 开发非常陌生,但我正在尝试创建一个网页,该网页在按下键时接收数据并将其发送到 python 后端进行处理。然后,Python 后端会将信息发送回 JavaScript 页面,JavaScript 页面将对其进行响应。这个过程需要连续发生,或者直到它被 Python 部分的某个响应终止。我已经编写了一个脚本来收集我在 Javascript 端需要的所有数据,并且我有一个 Python 应用程序来处理它(它需要进行一些编辑才能一次接收一个数组,但这不是问题) .目前,我的麻烦集中在让他们交流上。我正在使用 Flask,因为它处于开发的早期阶段,并且我已经阅读过它是一个简单高效的工具。

我开始尝试遵循有关如何启动和运行的教程,但没有取得太大的成功。我在网上找到的所有教程都以一个示例为中心,这让我对一般情况感到困惑。我在下面显示的代码是我必须从其中一个教程中使用的代码。我知道 render_template 打开了给定的文件(在本例中为 index.html)。我的第一个问题是:我会将 JavaScript 部分作为脚本放在该索引文件中吗?我读过通常应该将逻辑排除在模板之外,但我不确定我将如何运行此脚本 - 它应该在用户在网站上执行的操作下持续运行。其他一些教程表明,也许答案是使用多个 @app.route 语句,但我什至不确定 @app.route 到底在做什么。我知道它是一个装饰器,但是即使在基础研究之后,我也不清楚它的功能和改变它的目的。 @app.route 有什么作用?我遵循的另一个教程给了我如下所示的内容,但我对每个 @app.route 正在做什么有点困惑。我也不确定 request.get_json() 是什么。根据我的阅读,JSON 是一种通过属性描述数据的方式,而不是包括所有数据本身,但我不确定请求是做什么的(我知道它是从烧瓶中导入的)。

从这里开始,JavaScript 需要有一个 post 函数,对吧?我假设 Python 会“获取”JavaScript“发布”的内容,但第二个教程的代码似乎另有说明(因为通过 request.get_json() 请求数据的函数(我假设)也被列为方法 = ['邮政'])。我还假设我能够在前端运行“POST”请求,作为响应事件侦听器(在按键上)的函数的一部分。在 Python 获得 JavaScript 发布的内容后,Python 会发布响应,而 JavaScript 会得到响应并以实物形式响应。我假设这就是一切的运作方式。

最后,有人有关于 JavaScript 如何发布或获取请求的解释或资源吗?我有一些可以尝试的资源,但我还没有太多时间来充分探索它们。我已经在代码部分中包含了到目前为止我尝试过的内容。

总之,当我匆忙进入前端和后端开发的世界时,我感到有些不知所措。我觉得好像我理解了它背后的总体思想,但许多细节让我感到非常困惑。如果有什么我需要知道但我还不知道的事情,请告诉我——谢谢你的帮助,很抱歉这不是尽可能具体。

// Tutorial Python code
import os
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html", message = "Hello Flask!", contacts = ['c1', 'c2', 'c3', 'c4', 'c5']);


if __name__ == "__main__":
    app.run()

// Corresponding Tutorial HTML
<!DOCTYPE html>
<html>
  <head>
    <title>Flask Template Example</title>
  </head>

  <body>
    <div>
      <p>{{ message }}</p>

      <p>{{ contacts }}</p>
      <p>My Contacts:</p>
      <ul>
        {% for contact in contacts %}
        <li>{{ contact }}</li>
        {% endfor %}
      </ul>
    </div>
  </body>

</html>

// Second tutorial Python, two @app.route

import sys

from flask import Flask, render_template, request, redirect, Response
import random, json

app = Flask(__name__)

@app.route('/')
def output():
  return render_template('index.html', name='Joe')

@app.route('/reciever', methods = ['POST'])
def worker():
  data = request.get_json()
  result = ''

  for item in data:
    result += str(item['make']) + '\n'

  return result

if __name__ == "__main__":
  app.run()

// JavaScript communication first attempt (I was sending them to the second tutorial's Python code)

var sentArray = {"array" : [key, start, finish, holdtime, ud, uu, dd, 1]};
$.post("reciever",sentArray,function(){
});
    event.preventDefault();

// JavaScript communication second attempt

var sentArray = {"array" : [key, start, finish, holdtime, ud, uu, dd, 1]};
fetch('/typing', {
  method: 'POST',

  headers: {
    'Content-Type': 'application/json'
  }

  body: 
     {"array" : [key, start, finish, holdtime, ud, uu, dd, 1]}
}
});
event.preventDefault();

目前,我收到 500 错误,表明我没有正确处理某些事情。我不确定是什么,坦率地说,有数百种方法我可能会做错。感谢您的帮助!

【问题讨论】:

  • 您能否包含您收到的错误信息?不过猜测一下,您可能需要将 for item in data: 更改为 for item in data["array"]:
  • 您可能还想将其分解为多个问题。有很多东西要解压。路由如何工作,如何拆分我的模板,我应该使用 JSON,如何从 Javascript 发出 API 请求等。
  • 感谢@Tim 的回复!我按照 Avi Baruch 的建议转到了 Ajax,现在发布了一个更具体的问题。

标签: javascript python flask frontend backend


【解决方案1】:

尝试使用 ajax,它可以让你在后台发送帖子或获取请求,我学习了 ajax:vid

【讨论】:

  • 感谢您的回复-我切换到 AJAX 并发布了一个新问题-这让我进步了很多,我想我对现在发生的事情有了更多的了解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多