Nella parte precedente di questa serie, abbiamo implementato la funzionalità di caricamento delle immagini per gli utenti aggiungendo un desiderio. Abbiamo anche aggiunto alcune altre opzioni relative al desiderio di un utente nella pagina Aggiungi desideri. In questo tutorial, lo porteremo al livello successivo implementando la funzionalità per soddisfare un particolare desiderio.
Iniziamo clonando la parte precedente del tutorial da GitHub.
git clone https://github.com/jay3dec/PythonFlaskMySQLApp_Part6.git
Una volta clonato il codice sorgente, accedere alla directory del progetto e avviare il server web.
cd PythonFlaskMySQLApp_Part6 python app.py
Puntare il browser su http: // localhost: 5002 / e si dovrebbe avere l'applicazione in esecuzione.
Creeremo una nuova pagina chiamata cruscotto
dove verranno visualizzati tutti i desideri di diversi utenti. Qualsiasi utente può gradire o commentare i desideri visualizzati nella dashboard. Quindi vai alla cartella dei modelli e crea un file chiamato dashboard.html
. Aprire dashboard.html
e aggiungi il seguente codice HTML:
Python Flask Bucket List App Python Flask App
Bungee jumping
Veicolo ut id elit.
Bungee jumping
Veicolo ut id elit.
Bungee jumping
Veicolo ut id elit.
Bungee jumping
Veicolo ut id elit.
Bungee jumping
Veicolo ut id elit.
Bungee jumping
Veicolo ut id elit.
Aprire
app.py
e creare una nuova rotta chiamata/ showDashboard
. Usando questo percorso eseguiremo il rendering della pagina del dashboard.@ app.route ('/ showDashboard') def showDashboard (): restituisce render_template ('dashboard.html')Modifica il
/ validateLogin
metodo per reindirizzare l'utente all'accesso riuscito alla pagina dashboard anziché alla home page dell'utente.return redirect ('/ showDashboard')Salvare le modifiche precedenti e riavviare il server. Puntare il browser su http: // localhost: 50002 e accedere utilizzando un indirizzo e-mail e una password validi. Una volta effettuato l'accesso, dovresti riuscire a visualizzare la pagina del dashboard.
Come visto nell'immagine sopra, mostreremo tutti i desideri creati da diversi utenti e daremo l'accesso ad altri utenti per apprezzarli.
Compila il dashboard
Per prima cosa, dobbiamo recuperare i dati dal database per popolare il dashboard. Quindi creiamo una stored procedure per ottenere i desideri creati dagli utenti.
USA 'BucketList'; Procedura DROP SE ESISTE 'sp_GetAllWishes'; DELIMITER $$ USE 'BucketList' $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_GetAllWishes' () INIZIA seleziona wish_id, wish_title, wish_description, wish_file_path da tbl_wish dove wish_private = 0; END $$ DELIMITER;La procedura sopra memorizzata preleverà tutti i desideri
tbl_wish
che non sono contrassegnati come privati.Successivamente, creeremo un nuovo metodo Python per chiamare la stored procedure
sp_GetAllWishes
. Apertoapp.py
e aggiungere il seguente codice per ilgetAllWishes
metodo.@app.route ('/ getAllWishes') def getAllWishes (): prova: se session.get ('utente'): conn = mysql.connect () cursore = conn.cursor () cursore.callproc ('sp_GetAllWishes') risultato = cursor.fetchall () wishes_dict = [] per wish in result: wish_dict = 'Id': wish [0], 'Title': wish [1], 'Description': wish [2], 'FilePath': wish [3] wishes_dict.append (wish_dict) restituisce json.dumps (wishes_dict) else: restituisce render_template ('error.html', error = 'Accesso non autorizzato') tranne Exception as e: return render_template ('error.html', error = str (e))Nel metodo sopra, abbiamo prima verificato una sessione utente valida e poi abbiamo creato una connessione MySQL. Usando la connessione MySQL
conn
, abbiamo usato un cursore per chiamare la stored proceduresp_GetAllWishes
per ottenere i dati richiesti. Una volta che i dati sono stati recuperati, abbiamo analizzato il risultato e restituito un file correttoJSON
stringa.Chiameremo quanto sopra creato
/ getAllWishes
metodo quando viene caricata la pagina dashboard. Apertodashboard.html
e, usando jQuery AJAX, effettuare una chiamata a/ getAllWishes
sopradocument.ready.
$ (function () $ .ajax (url: '/ getAllWishes', digita: 'GET', success: function (response) console.log (risposta);, errore: function (errore) console.log (errore););)Salvare le modifiche precedenti e riavviare il server. Una volta effettuato l'accesso all'applicazione, controllare la console del browser e si dovrebbe essere in grado di visualizzare i dati recuperati dal database.
["Descrizione": "Bungee Jumping", "FilePath": "images_11 / creating-a-web-app-from-scratch-using-python-flask-and-mysql-part-7.jpg", "Id" : 10, "Titolo": "Bungee Jumping", "Descrizione": "Mount Everest climb", "FilePath": "static / Uploads / e3e8f7fa-6cb9-4cc3-9989-a80e5089546f.png", "Id": 11, "Titolo": "Mount Everest climb", "Descrizione": "River Rafting", "FilePath": "static / Uploads / dff3a64c-5193-42b5-9cdb-9d67a7bbacab.png", "Id": 14 , "Titolo": "River Rafting", "Descrizione": "Deep Sea Diving", "FilePath": "static / Uploads / b0656759-c038-46b4-9529-c208aaa6bfb7.png", "Id": 15, "Titolo": "Deep Sea Diving"]Utilizzando i dati della risposta, compileremo la nostra pagina dashboard. Innanzitutto, rimuovi il codice HTML tra il
.bene
div dadashboard.html
.Nel callback di successo della chiamata AJAX, analizzare il file
risposta
a un oggetto JavaScript.var data = JSON.parse (response);Dovremo creare il codice HTML in miniatura in modo dinamico usando jQuery per ogni serie di tre desideri di fila. Quindi per prima cosa creiamo una funzione JavaScript per creare il codice HTML in modo dinamico. Ecco il codice HTML che creeremo dinamicamente usando jQuery:
Testing App
Ciao
Chiameremo la funzione JavaScript
CreateThumb
. In questa funzione, creeremo gli elementi HTML e li aggiungeremo ai loro elementi genitore per ottenere il codice HTML mostrato sopra.function CreateThumb (id, title, desc, filepath) var mainDiv = $ ('') .attr (' classe ',' col-sm-4 col-md-4 '); var thumbNail = $ ('') .attr (' classe ',' miniatura '); var img = $ ('') .attr (' src ': filepath,' data-holder-rendered ': true,' style ':' height: 150px; width: 150px; display: block '); var caption = $ ('') .attr (' classe ',' didascalia '); var title = $ ('') .Text (titolo); var desc = $ ('
') .Text (decrescente); var p = $ ('
'); var btn = $ ('