为什么我无法在 Flask 中使用 request.form 获取文本值来对文本进行情感分析?

Why can't i get the text value using request.form in flask to perform sentimental analysis on the text?

我在 HTML、JS 和 flask 方面都没有经验,但我正在开发一个能够检测发件人情感分析的聊天机器人。

我的HTML代码:

      <div class="bottom_wrapper clearfix">
        <div class="message_input_wrapper">
          <form action = "{{ url_for('reply') }}" method = "POST">
          <input
            class="message_input"
            id="text_message"
            name = "sentimental_name"
            placeholder="Tell me how you feel today..."
            onkeydown="if (event.keyCode == 13)document.getElementById('send').click()">  
        </div>


        <!--div class = "send_message1" id = 'audio' onclick = "start_dictation()">


        <span style="font-size: 32px; color:black;">
          <i class="fas fa-microphone"></i>
        </span>
      </div-->
        <div class="send_message" id="send" onclick="get_message()">
          <!--<div class="icon"></div>-->

          <div class="text">Send</div>

        </div>
      </form>
      </div>

这是我的 python-flask 代码:

@app.route('/senti', methods = ['POST'])
def reply():
    if request.method == 'POST':
        message = request.form['text_message']
        a = TextBlob(message).sentiment.polarity
        b = TextBlob(message).sentiment.subjectivity

链接到 onlick 的我的 js =

function get_message(){
var message = document.getElementById("text_message").value;
var json_data = {"msg":message}
var sender = JSON.stringify(json_data)
console.log(sender)
console.log(message);
insert_chat('me',message);
interact(sender);
 }

控制台日志:

POST http://127.0.0.1:5000/senti 500 (INTERNAL SERVER ERROR)
send    @   jquery-3.4.1.js:9837
ajax    @   jquery-3.4.1.js:9434
interact    @   chat.js:34
get_message @   chat.js:55
onclick @   chat:58

看起来很简单,但是好像漏掉了什么。非常感谢!

您必须在

中使用 "sentimental_name"
request.form["sentimental_name"] 

因为你有

但是点击ENTER时使用JavaScript函数get_message()获取数据

<input ... onkeydown="if (event.keyCode == 13)document.getElementById('send').click()"> 

<div class="send_message" id="send" onclick="get_message()">

并使用字段 "msg" 转换为 JSON,因此它将其发送为 datajson,而不是 form

function get_message(){
   var message = document.getElementById("text_message").value;
   var json_data = {"msg":message}
   var sender = JSON.stringify(json_data)
   console.log(sender)
   console.log(message);
   insert_chat('me',message);
   interact(sender);

在 flask reply() 中,您可以使用以下方法检查:

print(request.args)
print(request.data)
print(request.form)
print(request.json)

JavaScript 可能期望 reply() returns 也 JSON - 即。

return jsonify(list_or_dictionary). 

在 JavaScript 中我看到 interact(sender); 所以你必须找到这个函数并查看它发送的内容以及它可能期望的结果。


顺便说一句:您也可以使用 requests.data.get("msg")request.form.get("msg") 而不是 ["msg"] 因为 .get() returns None 不能找到 "msg" 然后你可以使用 if not message: 来解决这个问题。并且 ["msg"] 在没有 "msg" 时引发错误,您将不得不使用 try:/except: 来捕获它。