[英]Flask Registration Form Condition if elif else doesn't work
當我嘗試注冊用戶時,我不知道為什么,但是如果數據庫中不存在我嘗試注冊的電子郵件,則 for 循環結束,盡管有一個 elif end else 語句。
有人知道為什么嗎?
這是 web.py 文件
from flask import Flask, session, redirect, url_for, escape, request, render_template
from wtforms import Form, BooleanField, TextField, PasswordField, validators
import MySQLdb
import logging
app = Flask(__name__)
db = MySQLdb.connect(host="127.0.0.1", user="root", passwd="usbw", port=3307, db="tourme")
cur = db.cursor()
@app.route('/register/', methods=["GET","POST"])
def register():
email_msg = None
success_msg = None
pass_msg = None
test = None
try:
if request.method == 'POST':
id_id = None
username = request.form['name']
lastname = request.form['lastname']
email = request.form['email']
password = request.form['password']
repeat = request.form['repeat']
cur = db.cursor()
cur.execute("SELECT * FROM users WHERE email = (%s)", [email])
for row in cur.fetchall():
if row[1] == email:
email_msg = "This e-mail already exist: " + row[1]
elif password == repeat:
cur.execute("INSERT INTO users VALUES (%s,%s,%s,%s,%s)", (id_id,email,username,lastname,password))
db.commit()
success_msg = "Bravo"
db.close()
else:
pass_msg = "Password must match"
return render_template("register.html", email_msg=email_msg, success_msg=success_msg, pass_msg=pass_msg)
except Exception as e:
return(str(e))
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
if __name__ == '__main__':
app.run(debug=True)
這是模板
<div class="register">
<form action="" method="POST">
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Your Username</span>
<input type="text" class="form-control" name="name" aria-describedby="basic-addon3">
</div>
<br>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Your Lastname</span>
<input type="text" class="form-control" name="lastname" aria-describedby="basic-addon3">
</div>
<br>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Email</span>
<input type="email" class="form-control" name="email" aria-describedby="basic-addon3">
</div>
<br>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Your Password</span>
<input type="password" class="form-control" name="password" aria-describedby="basic-addon3">
</div>
<br>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Repeat Password</span>
<input type="password" class="form-control" name="repeat" aria-describedby="basic-addon3">
</div>
<br>
<input type="Submit" value="Register" class="btn btn-default btn-sm">
</form>
{% if success_msg %}
<p class=success_msg><strong>Message:</strong> {{ success_msg }}
{% endif %}
{% if email_msg %}
<p class=success_msg><strong>Error:</strong> {{ email_msg }}
{% endif %}
{% if pass_msg %}
<p class=pass_msg><strong>Error:</strong> {{ pass_msg }}
{% endif %}
<br>
<a href="{{ url_for('index') }}">Home</a>
</div>
非常感謝你的幫助!
就像我在評論中所說的那樣,這幾乎不是編程問題,而是邏輯問題。
cur.execute("SELECT * FROM users WHERE email = (%s)", [email])
這將為您提供已經使用此電子郵件的所有用戶。 所以有2種可能性:
INSERT INTO
。 這就是邏輯問題:只有當查詢集為空時,您的插入才會發生,但如果是,您的代碼將無法訪問插入。我不知道你是如何在沒有循環的情況下嘗試的,但這應該有效:
cur.execute("SELECT * FROM users WHERE email = (%s)", [email])
if cur.fetchone():
email_msg = '...'
elif password == repeat:
cur.execute('...')
else:
pass_msg = '...'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.