In het vorige deel van deze tutorialserie hebben we de aanmeldings- en uitlogfunctionaliteit geïmplementeerd voor onze bucketlijst-applicatie. In dit deel van de serie zullen we de back-end en front-end implementeren die een gebruiker nodig heeft om bucket-listitems toe te voegen en weer te geven.
Laten we beginnen met het klonen van het vorige deel voor de tutorial vanuit GitHub.
git clone https://github.com/jay3dec/PythonFlaskMySQLApp_Part2.git
Nadat de broncode is gekloond, navigeert u naar de projectdirectory en start u de webserver.
cd PythonFlaskMySQLApp_Part2 python app.py
Richt uw browser op http: // localhost: 5002 / en u zou de applicatie moeten laten draaien.
We beginnen met het maken van een interface voor de ingelogde gebruiker om items uit de bucketlijst toe te voegen. Navigeer naar de templates
map in de projectmap en maak een bestand met de naam addWish.html
. Open addWish.html
en voeg de volgende HTML-code toe:
Python Flask Bucket Lijst App Python Flask-app
Open app.py
en voeg een nieuwe route en methode toe om de Voeg Wish toe
pagina.
@ app.route ('/ showAddWish') def showAddWish (): return render_template ('addWish.html')
Open userHome.html
en voeg een nieuw menu-item toe om te linken naar de Voeg Wish toe
pagina.
Sla de wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 5002 en log in met een geldig e-mailadres en wachtwoord. Nadat u bent ingelogd, klikt u op de Voeg Wish toe link en je zou de Add Wish-pagina moeten laten weergeven.
Om items aan de bucketlijst toe te voegen, moeten we een tabel maken met de naam tbl_wish
.
CREËER TABEL 'tbl_wish' ('wish_id' int (11) NOT NULL AUTO_INCREMENT, 'wish_title' varchar (45) DEFAULT NULL, 'wish_description' varchar (5000) DEFAULT NULL, 'wish_user_id' int (11) DEFAULT NULL, 'wish_date' datetime DEFAULT NULL, PRIMARY KEY ('wish_id')) ENGINE = InnoDB AUTO_INCREMENT = 3 STANDAARD CHARSET = latin1;
tbl_wish
zal hebben titel
, Omschrijving
en de ID kaart
van de gebruiker die de wens heeft gecreëerd.
Vervolgens moeten we een opgeslagen MySQL-procedure maken om items toe te voegen aan de tbl_wish
tafel.
GEBRUIK 'BucketList'; DROP-procedure IF EXISTS 'BucketList'. 'Sp_addWish'; DELIMITER $$ USE 'BucketList' $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_addWish' (IN p_title varchar (45), IN p_description varchar (1000), IN p_user_id bigint) BEGIN invoegen in tbl_wish (wish_title, wish_description , wish_user_id, wish_date) waarden (p_title, p_description, p_user_id, NOW ()); END $$ DELIMITER; ;
Maak een methode genaamd addWish
in app.py
.
@ app.route ('/ addWish', methods = ['POST']) def addWish (): # Code zal hier zijn
Aangezien we gegevens op deze methode zullen publiceren, hebben we deze expliciet in de gedefinieerde route aangegeven.
Wanneer een oproep wordt gedaan naar de addWish
methode, moeten we valideren of het een authentieke aanroep betreft door te controleren of de sessievariabele gebruiker
bestaat. Zodra we de sessie hebben gevalideerd, lezen we de geposte berichten titel
en Omschrijving
.
_title = request.form ['inputTitle'] _description = request.form ['inputDescription'] _user = session.get ('gebruiker')
Zodra we de vereiste invoerwaarden hebben, openen we een MySQL-verbinding en bellen we de opgeslagen procedure sp_addWish
.
conn = mysql.connect () cursor = conn.cursor () cursor.callproc ('sp_addWish', (_ title, _description, _user)) data = cursor.fetchall ()
Nadat we de opgeslagen procedure hebben uitgevoerd, moeten we de wijzigingen in de database vastleggen.
als len (data) 0 is: conn.commit () return redirect ('/ userHome') else: return render_template ('error.html', error = 'Er is een fout opgetreden!')
Hier is het complete addWish
methode.
@ app.route ('/ addWish', methods = ['POST']) def addWish (): try: if session.get ('user'): _title = request.form ['inputTitle'] _description = request.form ['inputDescription'] _user = session.get ('user') conn = mysql.connect () cursor = conn.cursor () cursor.callproc ('sp_addWish', (_ title, _description, _user)) data = cursor.fetchall () als len (data) 0 is: conn.commit () return redirect ('/ userHome') else: return render_template ('error.html', error = 'Er is een fout opgetreden!') anders: return render_template ('error .html ', error =' Unauthorized Access ') behalve uitzondering als e: return render_template (' error.html ', error = str (e)) eindelijk: cursor.close () conn.close ()
Sla alle broncode op en start de server opnieuw op. Richt uw browser op http: // localhost: 5002 en log in met een geldig e-mailadres en wachtwoord. Nadat u bent ingelogd, klikt u op de Voeg Wish toe link. Ga naar titel
en Omschrijving
voor uw wens en klik Publiceren. Na het succesvol toevoegen van de wens, zou het moeten verwijzen naar de homepage van de gebruiker. Log in op de MySQL-database en je zou de wens in je hebben tbl_wish
tafel.
Laten we een opgeslagen MySQL-procedure maken die de door een gebruiker gecreëerde wensen krijgt. Het zal de gebruiker nodig hebben ID kaart
als een parameter en retourneer een dataset met wensen die door de specifieke gebruikers-ID zijn gemaakt.
GEBRUIK 'BucketList'; DROP-procedure IF EXISTS 'sp_GetWishByUser'; DELIMITER $$ GEBRUIK 'BucketList' $$ CREËER PROCEDURE 'sp_GetWishByUser' (IN p_user_id bigint) BEGIN selecteer * from tbl_wish where wish_user_id = p_user_id; END $$ DELIMITER;
Laten we vervolgens een Python-methode maken die de sp_GetWishByUser
opgeslagen procedure om de door een gebruiker gecreëerde wensen te krijgen. Voeg een methode toe genaamd getWish
in app.py
.
@ app.route ('/ getWish') def getWish (): try: if session.get ('user'): _user = session.get ('user') else: return render_template ('error.html', error = 'Unauthorized Access') behalve uitzondering als e: return render_template ('error.html', error = str (e))
Zoals te zien is in de bovenstaande code, kan deze methode alleen met geldig worden gebeld gebruiker
sessie. Nadat we een geldige gebruikerssessie hebben goedgekeurd, maken we een verbinding met de MySQL-database en bellen we de opgeslagen procedure sp_GetWishByUser
.
_user = session.get ('user') # Maak verbinding met MySQL en haal data op con = mysql.connect () cursor = con.cursor () cursor.callproc ('sp_GetWishByUser', (_ user,)) wishes = cursor.fetchall ( )
Zodra we gegevens van MySQL hebben opgehaald, zullen we de gegevens analyseren en omzetten in een woordenboek
zodat het gemakkelijk terug te keren is zoals JSON
.
wishes_dict = [] voor wens in wensen: wish_dict = 'Id': wish [0], 'Title': wish [1], 'Description': wish [2], 'Date': wish [4] wishes_dict. voeg (wish_dict)
Na het converteren van de gegevens in een woordenboek
we zullen de gegevens omzetten in JSON
En terugkomen.
return json.dumps (wishes_dict)
Hier is het vol getWish
methode.
@ app.route ('/ getWish') def getWish (): try: if session.get ('user'): _user = session.get ('user') con = mysql.connect () cursor = con.cursor ( ) cursor.callproc ('sp_GetWishByUser', (_ user,)) wishes = cursor.fetchall () wishes_dict = [] voor wensen in wensen: wish_dict = 'Id': wish [0], 'Title': wish [1] , 'Beschrijving': wish [2], 'Date': wish [4] wishes_dict.append (wish_dict) return json.dumps (wishes_dict) else: return render_template ('error.html', error = 'Unauthorized Access') behalve Uitzondering als e: return render_template ('error.html', error = str (e))
Wanneer de startpagina van de gebruiker is geladen, bellen we de getWish
methode met behulp van jQuery AJAX en bind de ontvangen gegevens in onze HTML. In userHome.html
voeg het volgende toe jQuery
AJAX-script:
Sla de bovenstaande wijzigingen op en start de server opnieuw. Nadat u bent ingelogd met een geldig e-mailadres en wachtwoord, controleert u uw browserconsole en moet u de verlanglijst uit de database halen zoals getoond:
["Datum": "Vr, 23 januari 2015 23:26:05 GMT", "Beschrijving": "Ik wil de Mount Everest beklimmen", "Id": 1, "Titel": "Climb Everest", "Datum": "Vrijdag 23 januari 2015 23:27:05 GMT", "Beschrijving": "Ik wil van de top van een berg springen", "Id": 2, "Titel": "Bungee Jump"]
Nu moeten we de. Herhalen JSON
gegevens en bind het in de HTML. We zullen bootstrap gebruiken list-groep
om onze verlanglijstje-items weer te geven. Hier is de basissjabloon voor list-groep
:
Wens titel
Wensbeschrijving
Voeg de bovenstaande HTML-code toe aan de jumbotron
div in userHome.html
. Hier is hoe het eruit ziet:
Wat we zullen doen, is het hierboven getoonde creëren list-groep
div dynamisch voor elk verlanglijstje en deze toevoegen aan de jumbotron
div. Binnen het succes callback van de getWish
functieaanroep, maak een div zoals getoond:
var div = $ ('