簡體   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