我創建了一個登錄和注冊系統,在登錄時,如果用戶不存在,我想回傳一條彈出訊息,說“請先注冊”,然后在彈出視窗中回傳一個“確定”按鈕,按下該按鈕會將用戶發回到主頁“index.html”。當密碼輸入錯誤時也是同樣的事情。
這是 main.py 的登錄部分:
@app.route("/login", methods = ['GET', 'POST'])
def login():
if request.method=='GET':
return render_template("login.html")
else:
email = request.form['email']
password = request.form ['password']
user = get_user(email)
if user != None:
if user.password == password:
return render_template("home.html")
else:
return render_template("index.html")
else:
return render_template ('index.html')
我嘗試使用 flash,但它不起作用,登錄的 html 部分 (login.html)。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<title>DeBank</title>
</head>
<body style = "text-align: center; font-family: arial">
<form action="/login" method="POST">
<input type="text" name="email" placeholder="email:" required>
<br>
<input type="text" name="password" placeholder="password:" required>
<br>
<a href = "{{ url_for('index') }} "><input type="submit" value="Submit"></a>
</form>
<script src="{{ url_for ('static', filename='js/script.js')}}"></script>
</body>
</html>
謝謝
uj5u.com熱心網友回復:
從您的代碼中,當用戶單擊提交時,您直接提交表單,并且您正在執行 a
return render_template這意味著您將回傳整個頁面(新頁面)。如果您
flash在上面的代碼中使用,它只會在您回傳的“新”頁面頂部顯示訊息。要顯示彈出視窗,您必須以編程方式提交表單,即當用戶單擊
submit按鈕時,您需要攔截它,Javascript然后通過同樣Javascript的方式asynchronous向您的服務器發送資訊。您的服務器輸出將回傳到您的代碼。如果登錄成功,則重定向用戶。如果不是,則觸發一個彈出視窗。本質上,類似于(這是一個非常粗略的輪廓)
a) 在表單提交時,攔截它
document.getElementById(<form_id>).onsubmit = function() {
}
b) 通過類似fetch. 請參閱此示例了解如何通過 fetch 提交表單
c) 如果沒有密碼匹配,則觸發一個彈出視窗,否則重定向用戶
d) 您的 Python 代碼不應回傳 render_template。你應該只回傳一個值,讓你知道一切是成功還是失敗
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343847.html
標籤:html 烧瓶 sqlalchemy
