我一直在燒瓶中開發一個程式,該程式允許您搜索資料庫。我沒有對資料庫中的實際查找內容或任何內容進行編碼,但我現在不需要,并且資料庫現在不會影響任何內容。我一直無法理解如何將用戶在表單中輸入的內容傳遞給 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)
模板/index.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>
我也在和一個朋友一起作業,所以我不知道這些東西是用來做什么的。有人可以告訴我如何發送這些資料嗎?我一直在嘗試其他問題,但它們不起作用。先感謝您!
uj5u.com熱心網友回復:
這里有多個問題。正如評論中提到的,我建議慢慢地作業并將問題分解成小塊。在匆忙前進并積累許多難以解決的錯誤之前,請檢查每件作品是否有效。
大多數問題都在前端,因此您需要使用瀏覽器控制臺來檢查錯誤。您還可以使用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"。
這是一個讓您動起來的最小 AJAX 示例:
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">
<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)
如果你想提交和渲染一個新頁面,你不需要 jQuery:
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Welcome!</h1>
<p>Type to search the database.</p>
<form action="/" method="post">
<input name="search-term">
<input type="submit" value="search">
</form>
<div>{{search_term}}</div>
</body>
</html>
app.py:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
search_term = request.form.get("search-term", "")
return render_template("index.html", search_term=search_term)
if __name__ == "__main__":
app.run(host="127.0.0.1", port=8080, debug=True)
或者指向另一個頁面:
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Welcome!</h1>
<p>Type to search the database.</p>
<form action="/search" method="post">
<input name="search-term">
<input type="submit" value="search">
</form>
</body>
</html>
templates/search.html:
<!DOCTYPE html>
<html lang="en">
<body>
<p>You searched: '{{search_term}}'</p>
</body>
</html>
app.py:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/search", methods=["POST"])
def search():
search_term = request.form.get("search-term", "")
return render_template("search.html", search_term=search_term)
@app.route("/")
def index():
return render_template("index.html")
if __name__ == "__main__":
app.run(host="127.0.0.1", port=8080, debug=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405684.html
標籤:
上一篇:在Django模型的情況下,
