将返回的数据从Python传递给JavaScript?

时间:2018-01-20 08:46:54

标签: python

由于我正在开发一个用于预订公交车票的聊天机器人,我手动收到用户的请求并根据API的用户请求返回响应我几乎做了但我怀疑使用我的IP将返回的数据从Python传递给JavaScript地址。请有人帮助我。

这是我的py:

import requests,json
import requests, json
from flask import render_template
import os
import time
from flask import render_template, Flask, request
from chatterbot.trainers import ListTrainer
from chatterbot import ChatBot
# # import win32api
#
# win32api.MessageBox(0, 'hello', 'title')
app = Flask(__name__)
@app.route('/',methods=['GET','POST'])
def map():
    return render_template("sara.html")

@app.route('/run',methods=['GET','POST'])
def main():
    print("run")
    url = 'http://webapi.i2space.co.in/Buses/Sources'
    payload = {'some': 'data'}
    headers = {'consumerkey': 'D0106432CD19C98E0E8267EDFE9E3DF0', 'consumersecret': '43DEC493EBAE756BF7A2312F55FE5132'}
    r = requests.get(url, data=json.dumps(payload), headers=headers)
    print(r.text)
    # response_data = r.json()
    response_data = json.loads(r.text)
    # print(type(response_data))
    # s=(response_data[0]['Name'])
    # print(s)
    sorceid=request.args.get('sid')
    print(sorceid)
    l=''
    for a in response_data:
        print("hello")
        print(a)
        print(a['Name'])
        if (sorceid==a['Name']):
            l=a['Id']
            print(l)
            break
        else:
            print("no")
        # list={"iden":l}
        # print(list)
    return render_template("sara.html",l=l)

if __name__ == '__main__':
   app.run(host='192.168.1.80')

这是我的JavaScript:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="/static/style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
  </head>
  <body>
  <h1> HERE COMES!!!</h1>
  {{ l }}

<div class="w3-container w3-teal" align="center" style="width: 50%">
  <span>Bus-Bot</span>
</div>

 <div class="w3-container" align="center" style="width: 50%">

      <div id="chatbox">
       <p class="botText"> Bus-Bot:<span>Hi! I'm Bus-Bot.</span></p>
      </div>
      <div id="userInput">
          <input id="textInput" type="text" name="msg">
        <input id="buttonInput" type="submit" value="submit" >
      </div>

      <script>
        function getBotResponse() {
          var rawText = $("#textInput").val();
          var userHtml = '<div id="Chatid" class="container">'+
              '<p class="userText" >ME:<span>' + rawText + '</span></p>'+'</div>';
          $("#chatbox").append(userHtml);
          document.getElementById('userInput').scrollIntoView({block: 'start', behavior: 'smooth'});
        $.get("run", { msg: rawText }).done(function (data) {
              alert(data);
              var sou=data.l;
              alert(sou);
              alert(lol);
            var botHtml = '<div id="botcon" class="container darker">'+'<p class="botText">Bus-Bot:<span>' + sou + '</span></p>'+'</div>';
            console.log(botHtml);
            $("#botcon").append(botHtml);
            document.getElementById('userInput').scrollIntoView({block: 'start', behavior: 'smooth'});
          });


        }
        $("#textInput").keypress(function(e) {
            if(e.which == 13) {
                getBotResponse();
            }
        });$("#lolInput").keypress(function(e) {
            if(e.which == 13) {
                alert('weldone');
                getBotResponse();
            }
        });
        $("#buttonInput").click(function() {
          getBotResponse();
        })
      </script>
     <style>
         .container {
    border: 2px solid #dedede;
    background-color: #f1f1f1;
    border-radius: 5px;
    padding: 10px;
    margin: 10px 0;
}

/* Darker chat container */
.darker {
    border-color: #ccc;
    background-color: #ddd;
}

/* Clear floats */
.container::after {
    content: "";
    clear: both;
    display: table;
}

/* Style images */
.container img {
    float: left;
    max-width: 60px;
    width: 100%;
    margin-right: 20px;
    border-radius: 50%;
}

/* Style the right image */
.container img.right {
    float: right;
    margin-left: 20px;
    margin-right:0;
}

/* Style time text */
.time-right {
    float: right;
    color: #aaa;
}

/* Style time text */
.time-left {
    float: left;
    color: #999;
}
     </style>

 </div>
    </div>

  </body>
</html>

从Python我使用变量名称返回响应&#34; l&#34;但我不知道如何将此变量传递给JavaScript我希望我的回复低于此行

var botHtml = '<div id="botcon" class="container darker">'+'<p class="botText">Bus-Bot:<span>' + sou + '</span></p>'+'</div>'; 

1 个答案:

答案 0 :(得分:1)

Flask的render_template函数不会将任何变量从一种语言传递给另一种语言。它只是用它移交给它的变量替换它找到的html模板中的字符串。与

return render_template("sara.html",l=l)

您告诉程序采用sara.html模板并将变量l插入模板中找到{{ l }}的任何位置。您应该在发送给客户端的实际HTML中看到它。因为你将它插入你的标题下:

<h1> HERE COMES!!!</h1>
  {{ l }}

如果您使用它来呈现纯HTML而不是JavaScript,那么它会更有帮助。因为你也可以替换你的JavaScript中的东西,但这实际上不是进行客户端 - 服务器通信的明智方式。如果您想要在客户端和服务器之间进行通信,您应该考虑不同的架构。

进行接听电话

url = 'http://webapi.i2space.co.in/Buses/Sources'
payload = {'some': 'data'}
headers = {'consumerkey': 'D0106432CD19C98E0E8267EDFE9E3DF0', 'consumersecret': '43DEC493EBAE756BF7A2312F55FE5132'}
r = requests.get(url, data=json.dumps(payload), headers=headers)
服务器内部的

可能更好地保存在客户端Javascript中。