from flask import Flask, render_template, make_response, request, redirect, url_for, session from pprint import pprint import mysql.connector import configparser import os.path config = configparser.ConfigParser() MOBILES = ["android", "iphone", "blackberry"] try: config.read(".config") except Exception as E: print(E) def dbConnect(): mydb = mysql.connector.connect( host="localhost", user=config["mysql"]["Username"], passwd=config["mysql"]["Password"], database=config["mysql"]["Database"] ) return mydb def doesTableExist(): mydb = dbConnect() mycursor = mydb.cursor() mycursor.execute('''SHOW TABLES''') tables = mycursor.fetchall() if len(tables) == 0: mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`) ON DELETE CASCADE)''') mycursor.execute('''CREATE TABLE USERS (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255))''') mydb.close() def runQuery(query): mydb = dbConnect() c = mydb.cursor() c.execute(query) print(f'Excuting {query}') if "select" in query.lower(): ret = c.fetchall() else: ret = [] mydb.commit() mydb.close() return ret def readFromDB(): # query = '''select * from SHOPLIST''' query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id''' return runQuery(query) def insertToDB(data): query = f"INSERT INTO SHOPLIST (item, gotten, user_id) VALUES (\"{data['item']}\", 0, {data['name']})" # print(query) runQuery(query) def deleteRow(rowID): query = f"DELETE FROM SHOPLIST WHERE id = {rowID}" runQuery(query) def getItem(rowID): query = f"UPDATE SHOPLIST set gotten = 1 where id = {rowID}" print(query) runQuery(query) def unGetItem(rowID): query = f"UPDATE SHOPLIST set gotten = 0 where id = {rowID}" runQuery(query) app = Flask(__name__) app.config["DEBUG"] = True app.secret_key = b'*$#@U9423jr92jioJKL_)_;dasfj()12' @app.route('/') def index(): if session.get('id') is None: data = {"title":"Login"} return render_template("auth.html", data=data) query = readFromDB() pprint(query) data = {"title":"Shopping List", "results":query} for device in MOBILES: if device in request.user_agent.platform: return render_template('mobile.html', data=data) return render_template('index.html', data=data) @app.route('/post', methods=['POST']) def handle_data(): if "addValue" in request.form: for x in request.form: # print(x) if request.form[x] == '': return redirect(url_for('index')) print(request.form) insertToDB({"item": request.form["item"], "name": session["id"]}) if "rem" in request.form: print(request.form["rem"]) deleteRow(request.form["rem"]) if "got" in request.form: print(request.form["got"]) getItem(request.form["got"]) if "ungot" in request.form: unGetItem(request.form["ungot"]) if "loginform" in request.form: query = "select id, username from USERS where username = '%s' and password = md5('%s')" % (request.form["username"], request.form["password"]) res = runQuery(query) if len(res) != 0: session["id"] = res[0][0] session["username"] = res[0][1] if "logout" in request.form: session.clear() return redirect(url_for('index')) if __name__ == '__main__': doesTableExist() app.run(host="0.0.0.0")