如何使JavaScript和Python通过Flask进行连续通信?

时间:2019-07-16 23:46:01

标签: javascript python flask frontend backend

我对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是一种通过其属性描述数据的方式,而不是包括所有数据本身,但是我不确定请求是做什么的(我知道它是从flask导入的)。

从这里开始,JavaScript需要具有post函数,对吗?我假设Python将“获取” JavaScript“发布”的内容,但是第二篇教程的代码似乎表明其他情况(因为通过request.get_json()请求数据(我假设)的函数也被列为method = [' POST'])。我还假设我能够在前端运行“ 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错误,表明我没有正确处理某些事情。我不确定是什么,坦率地说,有数百种方法可以解决这个问题。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试使用ajax,它允许您在后台发送帖子或获取请求,我通过以下方式了解了ajax:vid