簡體   English   中英

如果 elif else 不起作用,則 Flask 注冊表條件

[英]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種可能性:

  1. 至少有一個用戶(希望你對電子郵件設置了唯一的限制,所以只有一個用戶)使用這封電子郵件。 由於查詢集不為空,因此您進入循環,顯然您也輸入了 if,因為您將該行與您在請求中使用的電子郵件進行比較以獲取該行。 最后你會得到預期的行為。
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM