In het vorige deel van deze tutorialserie hebben we de vereiste functionaliteit geïmplementeerd voor een ingelogde gebruiker om een wens toe te voegen. We hebben ook gezien hoe de wensen van een gebruiker op de startpagina van de gebruiker kunnen worden weergegeven.
In dit deel zullen we de functionaliteit implementeren voor het bewerken en verwijderen van de wensen die door een gebruiker zijn ingevoerd.
Laten we beginnen met het klonen van het vorige deel van de tutorial vanuit GitHub.
git clone https://github.com/jay3dec/PythonFlaskMySQLApp_Part3.git
Nadat de broncode is gekloond, navigeert u naar de projectdirectory en start u de webserver.
cd PythonFlaskMySQLApp_Part3 python app.py
Richt uw browser op http: // localhost: 5002 / en u zou de applicatie moeten laten draaien.
We binden de ontvangen gegevens al met behulp van jQuery aan onze HTML. We zullen die code aanpassen en jQuery-sjablonen gebruiken om het eenvoudiger te maken om gegevens te binden. We voegen ook een toe Bewerk
pictogram in onze HTML om een manier te bieden om de wens bij te werken. Open userHome.html
en een verwijzing naar jQuery-sjablonen bevatten.
Verwijder het bestaande list-groep
div en vervang het door de volgende HTML-code:
Binnen in de UL
met klasse list-groep
we zullen onze gegevens binden. Definieer een listTemplate
zoals getoond in de body van de HTML:
Wijzig de jQuery
AJAX succes callback om de gegevens te binden aan de listTemplate
.
Voeg ook enkele stijlen toe userHome.html
:
Sla alle 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, moet u de wensen van de gebruiker kunnen zien.
We zullen Bootstrap gebruiken om een popup te tonen om een interface te bieden om de wensen aan te passen. Voeg een verwijzing naar Bootstrap toe in userHome.html
.
Nadat de referentie is opgenomen, voegt u de volgende HTML toe aan userHome.html
.
De bovenstaande HTML zal als pop-up dienen. Wanneer de gebruiker op de knop klikt Bewerk
pictogram de pop-up zal verschijnen. We hebben de kenmerken al toegevoegd data-target
en data-toggle
die de modale pop-up zal activeren.
Sla de bovenstaande wijzigingen op en start de app opnieuw. Nadat u bent aangemeld bij de toepassing, klikt u op de Bewerk
pictogram en zou u de pop-up moeten kunnen bekijken.
Wanneer de gebruiker op het pictogram Bewerken klikt, wordt de pop-upupdate weergegeven met de titel
en Omschrijving
updaten. Om te beginnen, hebben we eerst de wens-ID nodig om de specifieke wensdetails op te halen zodra de gebruiker op het bewerkingspictogram klikt. Dus wijzig de jQuery-sjablooncode om een extra attribuut toe te voegen data-id
op het ankerelement bewerken.
We hebben ook een bij klikken
gebeurtenis om de methode aan te roepen Bewerk
. Binnen de functie Bewerken maken we een AJAX-aanroep naar een python-methode genaamd getWishById
die de wensdetails zal teruggeven.
functie Bewerken (iepen) $ .ajax (url: '/ getWishById', data: id: $ (iepen) .attr ('data-id'), type: 'POST', succes: functie (res) console.log (res);, error: function (error) console.log (error););
Open vervolgens app.py
en maak een methode genaamd getWishById
. Met behulp van deze methode krijgen we de specifieke wensdetails uit de database.
@ app.route ('/ getWishById', methods = ['POST']) def getWishById (): try: if session.get ('user'): _id = request.form ['id'] _user = session.get ('gebruiker') conn = mysql.connect () cursor = conn.cursor () cursor.callproc ('sp_GetWishById', (_ id, _user)) result = cursor.fetchall () wish = [] wish.append (' Id ': result [0] [0],' Title ': result [0] [1],' Description ': result [0] [2]) return json.dumps (wish) else: return render_template (' error .html ', error =' Unauthorized Access ') behalve uitzondering als e: return render_template (' error.html ', error = str (e))
Zoals je kunt zien in de bovenstaande methode, hebben we de wens-ID doorgegeven aan deze methode en het haalt de gegevens uit de database met behulp van de gebruikersnaam
en wens ID
. Nadat de gegevens zijn opgehaald, converteert het die gegevens naar een lijst en retourneert deze vervolgens als JSON
gegevens.
Laten we vervolgens de vereiste opgeslagen MySQL-procedure maken om gegevens uit de database op te halen.
DELIMITER $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_GetWishById' (IN p_wish_id bigint, In p_user_id bigint) BEGIN selecteer * from tbl_wish where wish_id = p_wish_id en wish_user_id = p_user_id; EINDE
De hierboven getoonde code is de opgeslagen procedure om bepaalde wensdetails te krijgen met behulp van de wens ID
en gebruikersnaam
.
Sla de wijzigingen op en start de server opnieuw op. Nadat u bent aangemeld bij de toepassing, klikt u op de Bewerk
pictogram en je zou de details moeten laten loggen in je browser console.
Als u de ontvangen gegevens aan de HTML-pop-up wilt binden, verwijdert u eerst de data-target
en data-toggle
attributen van de anchor-tag van het bewerkingspictogram. Voeg vervolgens de volgende code toe aan de Bewerk
JavaScript-functie callback voor het vullen van de pop-up en activeren.
// Parse de ontvangen JSON-tekenreeks var data = JSON.parse (res); // Vul de pop-up $ ('# editTitle'). Val (data [0] ['Title']); . $ ( '# EditDescription') val (data [0] [ 'Beschrijving']); // Start de pop-up $ ('# editModal'). Modal ();
Sla de wijzigingen op en start de server opnieuw op. Nadat u bent ingelogd op de toepassing, klikt u op het pictogram Bewerken en moet u de pop-up met de titel en beschrijving hebben.
Om de updatefunctionaliteit te implementeren, maken we eerst een opgeslagen MySQL-procedure.
DELIMITER $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_updateWish' (IN p_title varchar (45), IN p_description varchar (1000), IN p_wish_id bigint, In p_user_id bigint) BEGIN update tbl_wish set wish_title = p_title, wish_description = p_description waar wish_id = p_wish_id en wish_user_id = p_user_id; END $$ DELIMITER;
Zoals te zien is in de opgeslagen procedure hierboven, geven we de gewijzigde versie door titel
en Omschrijving
samen met de ID kaart
van de wens en de gebruiker om de details in de database bij te werken.
Laten we vervolgens een nieuwe methode maken met de naam updateWish
om de details bij te werken. Hier is de updateWish
methode:
@ app.route ('/ updateWish', methods = ['POST']) def updateWish (): try: if session.get ('user'): _user = session.get ('user') _title = request.form ['title'] _description = request.form ['description'] _wish_id = request.form ['id'] conn = mysql.connect () cursor = conn.cursor () cursor.callproc ('sp_updateWish', (_ title, _description, _wish_id, _user)) data = cursor.fetchall () als len (data) 0 is: conn.commit () return json.dumps ('status': 'OK') else: return json.dumps ( 'status': 'ERROR') behalve uitzondering als e: return json.dumps ('status': 'Unauthorized access') finally: cursor.close () conn.close ()
Zoals te zien in de bovenstaande code, hebben we na validatie van een geldige sessie de geposte gegevens verzameld en de opgeslagen procedure genoemd sp_updateWish
om de details bij te werken.
Om de. Te bellen updateWish
methode, moeten we een gebeurtenis toevoegen aan de Bijwerken
klik op de knop. Dus noem de update-knop btnUpdate
en bevestig een bij klikken
gebeurtenis zoals getoond:
$ ('# btnUpdate'). click (function () $ .ajax (url: '/ updateWish', data: title: $ ('# editTitle'). val (), description: $ ('# editDescription ') .val (), id: localStorage.getItem (' editId '), type:' POST ', success: function (res) $ (' # editModal '). modal (' hide '); // Re vul het rooster in, error: function (error) console.log (error);));
Zoals te zien is in de bovenstaande code, hebben we de editId
van lokale opslag
, dus binnen de Bewerk
functie bewaar de ID kaart
in lokale opslag
.
localStorage.setItem ( 'editId', $ (iep) .attr ( 'data-id'));
Sluit de getWish
AJAX roept een functie op, zodat we hem opnieuw kunnen bellen zodra de gegevens zijn bijgewerkt.
functie GetWishes () $ .ajax (url: '/ getWish', type: 'GET', success: function (res) var wishObj = JSON.parse (res); $ ('# ulist'). empty ( ); $ ('# listTemplate'). tmpl (wishObj) .appendTo ('# ulist');, error: function (error) console.log (error););
Bel de GetWishes
functie in de succes callback van de bijwerken
AJAX-oproep.
$ ('# btnUpdate'). click (function () $ .ajax (url: '/ updateWish', data: title: $ ('# editTitle'). val (), description: $ ('# editDescription ') .val (), id: localStorage.getItem (' editId '), type:' POST ', success: function (res) $ (' # editModal '). modal (' hide '); // Re vul het rooster uit GetWishes ();, error: function (error) console.log (error);));
Sla alle wijzigingen op en start de server opnieuw op. Nadat u bent ingelogd bij de applicatie, probeert u de beschikbare wensen van de gebruiker te bewerken.
Voeg de volgende HTML-code toe aan userHome.html
.
Voeg een verwijderpictogram toe in de listTemplate
door de volgende HTML toe te voegen:
Door op het bovenstaande verwijderpictogram te klikken, bellen we een JavaScript-functie genaamd Bevestig verwijderen
waar we de pop-upbevestiging activeren.
functie ConfirmDelete (elem) localStorage.setItem ('deleteId', $ (elem) .attr ('data-id')); $ ( '# DeleteModal') modal (.);
Sla de wijzigingen op en start de server opnieuw op. Nadat u bent ingelogd, klikt u op het pictogram Verwijderen in het verlanglijstje en zou u de bevestigingspop-up kunnen zien.
Om de Delete wish-functionaliteit te implementeren, laten we eerst de opgeslagen MySQL-procedure maken om te verwijderen.
DELIMITER $$ GEBRUIK 'BucketList' $$ CREËER PROCEDURE 'sp_deleteWish' (IN p_wish_id bigint, IN p_user_id bigint) BEGIN delete from tbl_wish where wish_id = p_wish_id en wish_user_id = p_user_id; END $$ DELIMITER;
De bovenstaande procedure neemt de wens-ID en gebruikers-ID op en verwijdert de overeenkomstige wens uit de database.
Laten we vervolgens een methode binnenin maken app.py
om de procedure te bellen sp_deleteWish
.
We zullen een methode aanmaken genaamd deleteWish
voor verwijdering van de wens.
@ app.route ('/ deleteWish', methods = ['POST']) def deleteWish (): try: if session.get ('user'): _id = request.form ['id'] _user = session.get ('gebruiker') conn = mysql.connect () cursor = conn.cursor () cursor.callproc ('sp_deleteWish', (_ id, _user)) result = cursor.fetchall () als len (resultaat) 0 is: conn. commit () retourneer json.dumps ('status': 'OK') else: return json.dumps ('status': 'An Error occured') else: return render_template ('error.html', error = 'Unauthorized Access') behalve uitzondering als e: return json.dumps ('status': str (e)) finally: cursor.close () conn.close ()
In de bovenstaande methode hebben we de sessie eerst gevalideerd. Zodra we de gebruikerssessie hebben gevalideerd, gebruiken we de wens-ID en de gebruikers-ID die we de opgeslagen procedure hebben genoemd sp_deleteWish
.
Om de bovenstaande methode te bellen deleteWish
, voeg een toe bij klikken
gebeurtenis naar de knop Verwijderen in de pop-up voor het verwijderen van een fout.
Maak een JavaScript-functie genaamd Verwijder
, en binnen Verwijder maak een AJAX-aanroep naar de python-methode deleteWish
.
functie Verwijderen () $ .ajax (url: '/ deleteWish', data: id: localStorage.getItem ('deleteId'), type: 'POST', success: function (res) var result = JSON. parseren (res); if (result.status == 'OK') $ ('# deleteModal'). modal ('hide'); GetWishes (); else alert (result.status);, fout : function (error) console.log (error););
Over het succes callback van het bovenstaande Verwijder
We controleren de geretourneerde status en als het goed is, verbergen we de modale pop-up en laden we de wensen opnieuw in.
Sla de wijzigingen op en start de server opnieuw op. Nadat u bent aangemeld bij de toepassing, probeert u een wens te verwijderen van de startpagina van de gebruiker.
In dit deel van de serie hebben we gezien hoe het Bewerk
en Verwijder
wens-functionaliteit voor onze Bucket List-toepassing. In het volgende deel van deze serie zullen we paginering implementeren voor onze home-lijst met gebruikers en ook enkele extra functies implementeren.
Broncode van deze tutorial is beschikbaar op GitHub.
Laat het ons weten in de reacties hieronder!