私のフラスコwebappにこの登録フォームがあります。これはユーザー名が既に登録されているかどうかをチェックします。何らかの理由で私が登録すると、home.html(私はログインしたことを意味します)にリダイレクトされ、私にはflash("Error. Username already exists")
が返されます。なぜそれがexcept:
に入り、次にfinally
に入りますか?私はそれをどのように修正するかについてはあまりよく分かりません。私は自分のデータベースもチェックしました。私のユーザー情報はそこに保存されます。フラスコのPythonの登録が正しく機能しない
if request.method == "POST":
with sql.connect(DATABASE) as con:
cur = con.cursor()
try:
# flash("register attempted")
username = request.form['username']
password = pwd_context.encrypt((str(request.form['password'])))
email = request.form['email']
cur.execute("INSERT INTO users (name,password,email) VALUES (?,?,?)",(username,password,email))
con.commit()
flash ("Successfully registrated")
except:
con.rollback()
flash("Error. Username already exists")
return redirect(url_for("register"))
finally:
session['logged_in'] = True
session['username'] = username
gc.collect()
return render_template("home.html")
con.close()
EDIT:
x = cur.execute("SELECT * FROM users WHERE username = ?"),(username)
if int(len(x)) > 0:
flash("Error. Username already exists")
return redirect(url_for("register"))
else:
cur.execute("INSERT INTO users (name,password,email) VALUES (?,?,?)", (username, password, email))
con.commit()
flash("Successfully registrated")
session['logged_in'] = True
session['username'] = username
gc.collect()
msg = Message('Hello', sender='[email protected]', recipients=[email])
msg.body = "your username for ak047 is: %s and your password is %s" % (request.form['username'],request.form['passwordd'])
mail.send(msg)
return render_template("home.html", msg=msg)
con.close()
私のコードでは、 'con.rollback()'はSQLクエリをキャンセルしません。 – Julian
私の投稿を編集しました。新しいコードは適切に動作しますか? – Julian
難しいことを教えてください。元のコードがうまく処理できなかったというエラーが発生しました。私が答えて言ったように、それはSQLインサートに入っている可能性があります。私はまだ 'Exception'をキャッチしてスタックトレースを記録すべきだと思います。 try-catchモデルは、あなたがやっていることに適しています。 –