[英]How can I send a XML from HTML in string to Python (using Flask) using Fetch API in Javascript
[英]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()
。 #hey
和letsgo
是不明确的名称,不会让调试应用程序变得更容易。
使用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.