![](/img/trans.png)
[英]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.