Python-Datenbanksatz ändern?
Hallo, ich habe das programmiert, aber irgendwie wird das Passwort nicht geändert. Eine Fehlermeldung kommt aber nicht.
@app.route('/change_password', methods=['GET', 'POST'])
@login_required
def change_password():
if request.method == 'POST':
password_new = request.form.get('password_new')
password_old = request.form.get('password_old')
if password_old == password_new:
flash('Das neue Passwort darf nicht dem alten Passwort entsprechen.')
else:
user_id = current_user.get_id()
result = dbaccess.change_password(user_id, password_new)
flash('Passwort geändert!')
return render_template('change.html')
def change_password(self, user_id, password):
bcrypt = Bcrypt()
pw_hash = bcrypt.generate_password_hash(password).decode('utf-8')
result = self.db.session.execute(text('''
UPDATE user
SET password = :pw_hash
WHERE ID = :id
'''), {
'pw_hash': pw_hash,
'id': user_id,
})
return result
Könnt ihr mir sagen, was ich falsch gemacht habe?
1 Antwort
Anwendungen wie PyCharm (Professional) oder VS Code (lies hier oder nutze ein Videotutorial wie dieses) erlauben es dir, eine Flask-Anwendung via Remote-Debugging zu analysieren. Ebenso könntest du ein Loggingsystem einbauen, welches dir Rückmeldungen über den Programmverlauf gibt.
Für deinen Fall wäre es von Interesse erst einmal in Erfahrung zu bringen,
- ob die Bedingung der ersten if-Anweisung erfüllt wird.
- die change_password-Methode aufgerufen wird.
- welchen Wert die Variable user_id hat und ob dieser in der Datenbanktabelle enthalten ist.
Auf Grundlage dieser Informationen lässt sich eine weitere Eingrenzung vornehmen.
Dann schau, ob die Änderung zumindest in der Datenbank angekommen ist.
select password from user where id='your user id ...'
Die von dir berichtete Rückmeldung deutet jedenfalls auch darauf hin.
Wenn die Daten in der Datenbank geändert wurden, ist entweder der Loginprozess oder dein Testverfahren nicht richtig.
Also ich habe jetzt bei der IF und bei der bei der change_password() Funktion flash/prints gemacht und es wurde alles ausgeführt.
In der user Datenbank gibt es die Spalte ID und es wurde beim flash mit 1 ausgegeben und dass es ein string ist