をGET。私はpythonフラスコ、sqlite3とSQLiteのDBブラウザを使用しています。私はログイン部分に問題があります。PythonのフラスコPOST /私は私のウェブサイトでユーザー認証を支援する必要がある要求
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8"/>
<title>PackageDrop Login</title>
<link type = "text/css" rel = "stylesheet" href="{{ url_for('static', filename='login.css') }}" />
<link type = "text/css" rel = "stylesheet" href="{{ url_for('static', filename='cssmainpage.css') }}" />
</head>
<body>
<form action="/login" method="POST" autocomplete="off">
Username:<br>
<input type="text" name="username">
<br>
Password:<br>
<input type="password" name="password">
<br><br>
<input type="submit" value="Login">
</body>
</html>
に転送されているページがあるだけのシンプルなHTML、何も特別な:私はHTMLのウェブサイトにログインし、リダイレクトしようとするたびに、それはここで
エラー404がログインページのためのコードであると言います私はそれをアップロードしていません。 あなたが理解するためにもっと多くの情報が必要と思われる場合は、尋ねてすぐに投稿します。 私はすべての助けをありがとう。
EDIT1: login.htmlフォームアクションを "login.html"から "login"に変更しました。これで、400 Bad Requestエラーが発生します。
EDIT2: リダイレクト作品。 "ProgrammingError:スレッドで作成されたSQLiteオブジェクトは、同じスレッドでのみ使用できます。オブジェクトはスレッドID 7812で作成されました。これはスレッドID 7388です"というログインエラーが発生しました。
が@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
checkP = conn.execute('select pword from users where uname = request.form[\'username\']')
arrayCheck = checkP.fetchall()
if request.method == 'POST':
if request.form['password'] != arrayCheck[[0][0]]:
error = 'Incorrect password'
return redirect(url_for('login.html'))
elif len(arrayCheck) == 0:
error = 'Username or password is incorrect'
return redirect(url_for('login.html'))
else:
session['logged_in'] = True
flash('You are logged in')
return redirect(url_for("userpage"))
return render_template('login.html')
再びあなたのロジックを見てください。ユーザー名とパスワードの値を自分と比較しています。 –
@DanielRosemanしかし私は、ポストリクエストからユーザ名とパスワードをチェックして、それをデータベースのユーザ名とパスワードと比較しています。それはあなたがそれをする方法ではありませんか? – KatomPower
あなたはそうではありません。あなたはそれをどこでやっていると思いますか?あなたは 'request.form'からユーザー名を取得し、それを' request.form ['username'] '、すなわちそれ自体に直接比較します。 –