繁体   English   中英

为什么我不能从 flask html 向 flask Z23EEEB4347BDD26BDDFC6B7EE 发送消息?

[英]why can't I send messages from flask html to flask python?

我一直在研究 flask 中的一个程序,该程序允许您搜索数据库。 我没有对数据库中的实际查找内容或任何内容进行编码,但我现在不需要,并且数据库现在不会影响任何内容。 我无法理解如何将用户在表格中输入的内容输入到 python 程序中。 它运行没有错误,但是当我检查收到的内容时,我得到了无。 有什么我做错了吗? 这是我的代码,非常混乱,只有一个文件。

主文件

from flask import Flask, render_template
from flask import request
import pdfkit, time




def go(letters):
  data = open('data.txt','r')
  return letters
  
   
app = Flask(__name__)
       
@app.route("/path/", methods=['GET','POST'])
def search():
  time.sleep(1)
  data=request.get_data()
  print(data)
  return go(data)

@app.route('/')
def index():
  
  return render_template('index.html')

if __name__ == "__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)
    app.run(debug=True)

模板/索引.html

<!Doctype html!>

<html land=en>
<h1>Welcome!</h1><br>
<p>Type to search the database.</p>
<br><form name='this' onsubmit='letsgo()' class='text' action='/path/' method='post'><input id='hey' type='text'> <input type='submit' value='search'></form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var test = document.getElementById('hey').value;
  const xhr = new XMLHttpRequest();
function letsgo() { 
  
  const data = document.getElementById("hey").value
  alert(data)
$.ajax({
  type : 'POST',
  url : "{{'https://file-encrypter.ashwinchera.repl.co/path/'}}",
  dataType: 'data',
  datas : {'data':data}
});
            

};      
</script>

我也在和一个朋友一起工作,所以我不知道这些东西是用来做什么的。 有人可以告诉我如何发送这些数据吗? 我一直在尝试其他问题,但它们不起作用。 先感谢您!

这里有多个问题。 正如评论中提到的,我建议慢慢地工作并将问题分解成小块。 在匆忙前进并积累许多难以解决的错误之前,请检查每件作品是否有效。

大多数问题都在前端,因此您需要使用浏览器控制台来检查错误。 您还可以使用HTML 验证器工具来确保您的 HTML 有意义并捕获诸如land=en之类的拼写错误。

由于听起来您想在不刷新页面的情况下发布并且您正在使用 jQuery,因此表单上的许多属性都是不必要的:

onsubmit='letsgo()' action='/path/' method='post'

都可以去掉。 当您使用它时,请删除任何未使用的噪音,例如:

var test = document.getElementById('hey').value;
  const xhr = new XMLHttpRequest();

和不必要的 ids 和 classes。 这些只是增加了混乱。 当事情没有意义并且不起作用时,请尝试剥离代码而不是添加代码。

"{{'https://file-encrypter.ashwinchera.repl.co/path/'}}"应该只是/path以便它可以在任何域(例如本地主机)上工作。 如果你在跨域工作,那就是另一回事了,但我不认为你是。

$.ajax调用中, datas是一个错字。 那应该是data

const data = document.getElementById("hey").value不是必需的。 如果你懒得导入 jQuery,你不妨一直使用它: $("#hey").val() #heyletsgo是不明确的名称,不会让调试应用程序变得更容易。

使用event.preventDefault()来阻止表单提交。

在后端,再次删除文件读取和import pdfkit, time等任何杂物和噪音。 GET添加到/path路由的接受动词列表中似乎很奇怪(这太笼统地命名了,就像go )。

由于您使用的是表单数据,因此request.get_data()可以是request.form.get("data")其中"data"是您要从已解析的表单中检索的键。

这是一个让您动起来的最小示例:

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
  <h1>Welcome!</h1>
  <p>Type to search the database.</p>
  <form>
    <input id="search-term" type="text">
    <input type="submit" value="search">
  </form>
  <div id="result"></div>

<script>
$("form").submit(function (event) {
  event.preventDefault();
  var data = $("#search-term").val();
  $.ajax({
    type: "POST",
    url: "search",
    data: {data},
    success: data => $("#result").text(data),
    error: res => console.error(res),
  });
});      
</script>
</body>
</html>

app.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route("/search", methods=["POST"])
def search():
    data = request.form.get("data")
    print(data)
    return data

@app.route("/")
def index():
    return render_template("index.html")

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=8080, debug=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM