Mit der Datenbank hab ich das nicht hinbekommen. Da es nur noch 5 Wochen bis zu den Prüfungen sind muss ich so langsam meine Pythondatei loslassen. Ich hab mir gedacht, dass vllt diese Variante viel einfacher ist.
Code:
"""Minimale Flask Anwendung"""
# Import benötigter Flask-Module
from functools import wraps
import os
from flask import Flask, render_template, request, redirect, url_for, session,g, flash
from werkzeug.security import generate_password_hash , check_password_hash
import mysql.connector
# Import der Verbindungsinformationen zur Datenbank:
# Variable DB_HOST: Servername des MySQL-Servers
# Variable DB_USER: Nutzername
# Variable DB_PASSWORD: Passwort
# Variable DB_DATABASE: Datenbankname
from db.db_credentials import DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE
app = Flask(__name__)
# Secret-Key für Nutzung von Sessions
app.secret_key = os.urandom(24)
#DATENBANK VERBINDUNG AUFBAU
@app.before_request
def before_request():
g.con = mysql.connector.connect(host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=DB_DATABASE)
g.cur = g.con.cursor()
@app.teardown_request
def teardown_request(exception):
cur = getattr(g, 'cur', None)
if cur is not None:
cur.close()
con = getattr(g, 'con', None)
if con is not None:
con.close()
@app.route('/register', methods=["GET", "POST"])
def register():
"""Registrieren"""
if request.method == "GET":
# App-Route wurde direkt aufgerufen
return render_template("register.html")
cur = g.con.cursor()
regname = request.form["name"]
regvorname = request.form["vorname"]
regemail = request.form["email"]
regbenutzername = request.form["Benutzername"]
regpasswort = request.form["Passwort"]
if regname == "":
error = 'Bitte Namen eingeben.'
flash(f'{error}')
return render_template("register.html")
if regvorname == "":
error = 'Bitte Vornamen eingeben.'
flash(f'{error}')
return render_template("register.html")
if regemail == "":
error = 'Bitte E-Mail eingeben.'
flash(f'{error}')
return render_template("register.html")
if regbenutzername == "":
error = 'Bitte Benutzernamen eingeben.'
flash(f'{error}')
return render_template("register.html")
if regpasswort == "":
error = 'Bitte Passwort eingeben.'
flash(f'{error}')
return render_template("register.html")
g.cur.execute("select * from USERS where Benutzername = %s", (regbenutzername,))
benutzernamedoppelt = g.cur.fetchone()
if benutzernamedoppelt is not None:
error = f'Benutzername "{regbenutzername}" wurde schon ausgewählt.'
flash(f'{error}')
return render_template("register.html")
g.cur.execute('SELECT * FROM USERS WHERE EMail = %s', (regemail,))
emaildoppelt = g.cur.fetchone()
if emaildoppelt is not None:
error = f'E-Mail "{regemail}" existiert bereits.'
flash(f'{error}')
return render_template("register.html")
g.x = generate_password_hash(regpasswort) #passwort hashen
#in die tabelle users hinzufügen
g.cur.execute("insert into USERS (Name,Vorname,EMail,Benutzername,Passwort,Passwortklartext,Admin) "
"values (%s, %s, %s, %s, %s, %s, 0)",
(regname, regvorname, regemail, regbenutzername,
generate_password_hash(regpasswort), regpasswort))
g.con.commit()
return render_template("index.html")
@app.route('/login', methods=['GET', 'POST'])
def loginprogress():
if request.method == "GET":
# App-Route wurde direkt aufgerufen
return render_template("login.html") #kehre zur loginseite
# Übergabe der Daten aus dem Textfeld
log_benutzername = request.form["benutzername"]
log_passwort = request.form["passwort"]
# Wenn der Benutzername nicht eingegeben wurde
if log_benutzername == "":
flash("Bitte Benutzername und Passwort eingeben")
return redirect(url_for('index'))
# Wenn das Passwort nicht eingegeben wurde
if log_passwort == "":
flash("Bitte Passwort eingeben")
return redirect(url_for('index'))
# Überprüfen ob der Benutzername vorhanden ist
g.cur.execute("SELECT Benutzername, UserID FROM USERS where Benutzername = %s", (log_benutzername,))
db_id = g.cur.fetchone()
# Wenn der Name nicht vorhanden ist
if db_id is None:
flash("Benutzer exisitiert nicht")
#return render_template(page)
return redirect(url_for('index'))
#Überprüfen ob der Loginbenutzername mit dem Benutzername aus der DB übereinstimmt
if log_benutzername == db_id[0]:
#das Passwort aus der Datenbank holen
g.cur.execute("SELECT Passwort FROM USERS where Benutzername = %s", (log_benutzername,))
db_passwort = g.cur.fetchone()[0]
print(db_passwort)
#Überprüfen ob die gehashten Passwörter übereinstimmen
if check_password_hash(pwhash=db_passwort, password=log_passwort):
print(2)
session['log_benutzername'] = log_benutzername
session['UserID'] = db_id[1]
flash("Sie sind eingeloggt")
return redirect(url_for('benutzerseite'))
#Ausgabe wenn das Passwort falsch ist
print(3)
flash("Benutzername oder Passwort falsch")
#return render_template(page)
return redirect(url_for('index'))
# Ausgabe wenn der Benutzername falsch ist
flash("Benutzername oder Passwort falsch")
#return render_template(page)
return redirect(url_for('index'))
@app.route('/logout', methods=['GET', 'POST'])
def logoutprogress():
# session.pop('log_benutzername', None)
# session.pop('userid', None)
values = list(session.keys())
print(values)
print(type)
for i in values:
session.pop(i)
flash("Sie sind ausgeloggt")
return redirect(url_for('index'))
@app.route('/Admin', methods=['POST', 'GET'])
def admin():
"""Startseite"""
return render_template('admin.html')
#Admin Anfang
# User löschen
@app.route('/deleteUser/<int:id>', methods=['POST'])
def deleteUser(id):
cur = g.con.cursor()
cur.execute(
"DELETE FROM USERS WHERE UserID=%s", (id,))
g.con.commit()
cur.close()
return redirect(url_for('adminuser'))
@app.route('/adminuser')
def adminuser():
g.cur.execute(
"Select * from USERS"
)
users = g.cur.fetchall()
return render_template('adminuser.html', users=users)
# Restaurants hinzufügen
@app.route('/admin', methods=['POST','GET'])
def restauranteingabe():
if request.method == 'POST':
# Formular wurde abgeschickt: Daten in DB speichern
restaurantname = request.form['restaurantname']
adresse = request.form['adresse']
postleitzahl = request.form['postleitzahl']
ort = request.form['ort']
info = request.form['info']
# typ = request.form['admin']
cur = g.con.cursor()
cur.execute("INSERT INTO RESTAURANTS (Restaurantname, Adresse, Postleitzahl, Ort, Info) VALUES (%s, %s, %s, %s, %s)",
(restaurantname, adresse, postleitzahl, ort, info))
g.con.commit()
cur.close()
return redirect(url_for('restauranteingabe'))
cur = g.con.cursor()
cur.execute("SELECT * FROM RESTAURANTS")
restaurant = cur.fetchall()
cur.close()
return render_template('admin.html', restaurant=restaurant)
# Restaurants löschen
@app.route('/deleteRestaurant/<int:id>', methods=['POST'])
def deleteRestaurant(id):
cur = g.con.cursor()
cur.execute(
"DELETE FROM RESTAURANTS WHERE RestaurantID=%s", (id,))
g.con.commit()
cur.close()
return redirect(url_for('restauranteingabe'))
@app.route('/editRestaurant/<int:id>', methods=['POST', 'GET'])
def editRestaurant(id):
if request.method == 'POST':
# Formular wurde abgeschickt: Daten in DB speichern
restaurantname = request.form['restaurantname']
adresse = request.form['adresse']
postleitzahl = request.form['postleitzahl']
ort = request.form['ort']
info = request.form['info']
cur = g.con.cursor()
cur.execute(
"UPDATE RESTAURANTS SET Restaurantname=%s, Adresse=%s, Postleitzahl=%s, Ort=%s, info=%s WHERE RestaurantID=%s",
(restaurantname, adresse, postleitzahl, ort, info, id,))
g.con.commit()
cur.close()
return redirect(url_for('restauranteingabe'))
cur = g.con.cursor()
cur.execute("SELECT * FROM RESTAURANTS WHERE RestaurantID=%s", (id,))
restaurant = cur.fetchall()
cur.close()
return render_template('edit_restaurant.html', restaurant=restaurant)
# Admin Ende
@app.route('/')
def index():
"""Startseite"""
return render_template('index.html')
@app.route('/agb')
def agb():
"""AGB"""
return render_template('agb.html')
@app.route('/about')
def about():
"""About"""
return render_template('about.html')
@app.route('/kontakt')
def contact():
"""Kontakt"""
return render_template('kontakt.html')
@app.route('/confirmation/<int:UserID>')
def validiereregisteremail(UserID):
g.cur.execute("Update USERS set confirmed = 1 where UserID = %s", (UserID,))
g.con.commit()
flash('Account verifiziert.')
return redirect(url_for('index'))
@app.route('/reservation')
def reservation():
"""Reservation"""
return render_template('reservation.html')
@app.route('/benutzerseite')
def benutzerseite():
"""Benutzerseite"""
return render_template('benutzerseite.html')
@app.route('/überuns')
def überuns():
"""Überuns"""
return render_template('überuns.html')
@app.route('/datenschutz')
def datenschutz():
"""Datenschutz"""
return render_template('datenschutz.html')
# Start der Flask-Anwendung
if __name__ == '__main__':
app.run(debug=True)
Datenbank (db_schema):
-- Tabellenstruktur für Tabelle `Users`
create table USERS (
UserID int PRIMARY KEY auto_increment,
Name varchar(25) NOT NULL ,
Vorname varchar(25) NOT NULL,
EMail varchar(50) NOT NULL,
Benutzername varchar(25) NOT NULL,
Passwort varchar(200) NOT NULL,
Passwortklartext varchar(30) not Null,
confirmed tinyint(1) default 0,
subscribed boolean default false,
Admin boolean
);
-- Daten für Tabelle 'USERS' (Daten hinzufügen)
-- Passworthash-->verschlüsselt Passwortklartext (sichtbar)
INSERT INTO USERS(UserID, Name, Vorname, EMail, Benutzername, Passwort,Passwortklartext, Admin) values (1, 'Ceylan', 'Pinar', '
pinarceylan@hotmail.de', 'Pinaruser1', 'Test1hash', 'Test1', '1');
INSERT INTO USERS(UserID, Name, Vorname, EMail, Benutzername, Passwort,Passwortklartext, Admin) values (2, 'Mueller', 'Schmidt', '
schmidtmueller@hotmail.de','schmidtuser2','Test2hash', 'Test2','2');
So sieht das bei mir gerade aus. Registration, Login und Logout funktioniert.
Danke Sirius03
Mit freundlichen Grüßen
fs1903