Creazione di un'applicazione Web da zero utilizzando Python Flask e MySQL Parte 2

Nella parte precedente di questa serie, abbiamo visto come iniziare con Python Flask e MySQL e implementato la parte di registrazione utente della nostra applicazione. In questo tutorial, porteremo questo al livello successivo implementando la funzionalità di accesso e disconnessione per la nostra applicazione.

Iniziare

Prima clona il codice sorgente dell'esercitazione precedente da GitHub.

git clone https://github.com/jay3dec/PythonFlaskMySQLApp---Part-1.git

Una volta che il codice sorgente è stato clonato, accedere a PythonFlaskMySQLApp --- Part-1 directory e avviare il server.

python app.py

Puntare il browser su http: // localhost: 5002 e si dovrebbe avere l'applicazione in esecuzione.

Creazione dell'interfaccia di accesso

Navigare verso PythonFlaskMySQLApp --- part-1 / templates e creare un nuovo file chiamato signin.html. Aperto signin.html e aggiungi il seguente codice HTML:

   Python Flask Bucket List App       

Python Flask App

Bucket List App

© Azienda 2015

Aperto app.py e aggiungi una nuova rotta per l'interfaccia di accesso.

@ app.route ('/ showSignin') def showSignin (): restituisce render_template ('signin.html') 

Quindi, apri index.html e signup.html, e aggiungi il href link per l'accesso su entrambe le pagine come / showSignin. Salva tutte le modifiche e riavvia il server. 

python app.py

Puntare il browser su http: // localhost: 5002 e fare clic su Registrati link e dovresti essere in grado di vedere la pagina di accesso.

Implementare l'accesso

Ora, abbiamo bisogno di creare una funzione per convalidare il login dell'utente. Facendo clic Registrati pubblicheremo l'indirizzo email e la password inseriti nella funzione utente di convalida.

Creazione di una stored procedure 

Per convalidare un utente, avremo bisogno di una procedura memorizzata MySQL. Quindi creare una procedura memorizzata MySQL come mostrato:

DELIMITER $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURE 'sp_validateLogin' (IN p_username VARCHAR (20)) BEGIN seleziona * da tbl_user dove user_username = p_username; END $$ DELIMITER; 

Otterremo i dettagli dell'utente in base a nome utente dal database MySQL usando sp_validateLogin. Una volta ottenuta la password hash, la convaliderà con la password inserita dall'utente.

Convalidare il metodo utente

Creare un metodo per convalidare l'utente che chiameremo quando l'utente invia il modulo:

@ app.route ('/ validateLogin', methods = ['POST']) def validateLogin (): try: _username = request.form ['inputEmail'] _password = request.form ['inputPassword'] tranne Exception come e: return render_template ('error.html', error = str (e)) 

Come visto nel codice sopra, abbiamo letto l'indirizzo email e la password inseriti in _nome utente e _parola d'ordine. Ora chiameremo il sp_validateLogin procedura con il parametro _nome utente. Quindi creare una connessione MySQL all'interno del validateLogin metodo:

con = mysql.connect ()

Una volta creata la connessione, creare a cursore usando il contro connessione.

cursor = con.cursor ()

Usando il cursore, chiama la procedura memorizzata MySQL come mostrato:

cursor.callproc ( 'sp_validateLogin', (_ username,))

Ottieni i record recuperati dal cursore come mostrato:

data = cursor.fetchall ()

Se i dati hanno alcuni record, abbineremo la password recuperata alla password inserita dall'utente.

se len (dati)> 0: se check_password_hash (str (data [0] [3]), _ password): return redirect ('/ userHome') else: return render_template ('error.html', error = 'Indirizzo email errato o Password. ') else: return render_template (' error.html ', error =' Indirizzo email o password errati. ')

Come visto nel codice precedente, abbiamo usato un metodo chiamato check_password_hash per verificare se la password di hash restituita corrisponde alla password inserita dall'utente. Se tutto va bene, reindirizzeremo l'utente a userHome.html. E se c'è qualche errore, lo mostreremo error.html con il messaggio di errore.

Ecco il completo validateLogin codice:

@ app.route ('/ validateLogin', methods = ['POST']) def validateLogin (): try: _username = request.form ['inputEmail'] _password = request.form ['inputPassword'] # connetti a mysql con = mysql.connect () cursor = con.cursor () cursor.callproc ('sp_validateLogin', (_ username,)) data = cursor.fetchall () se len (data)> 0: se check_password_hash (str (dati [0] [3]), _ password): session ['user'] = data [0] [0] return redirect ('/ userHome') else: return render_template ('error.html', error = 'Indirizzo email o password errati. ') else: restituisce render_template (' error.html ', error =' Indirizzo e-mail o password errati. ') tranne Exception as e: restituisce render_template (' error.html ', error = str (e)) finally: cursor.close () con.close () 

Crea una pagina chiamata userHome.html all'interno della cartella dei modelli e aggiungi il seguente codice HTML:

   Python Flask Bucket List App      

Python Flask App

Benvenuto a casa !!

© Azienda 2015

Crea anche una pagina di errore chiamata error.html nel modelli cartella e aggiungi il seguente codice HTML:

   Accesso non autorizzato :: Python Flask Bucket List App     

Python Flask App

errore

© Azienda 2015

Dentro error.html abbiamo un elemento come mostrato:

errore

Il valore per la variabile può essere passato da render_template funzione e può essere impostato dinamicamente.

Al momento dell'accesso con successo stiamo reindirizzando l'utente alla home page dell'utente, quindi è necessario creare un percorso chiamato / UserHome come mostrato:

@ app.route ('/ userHome') def userHome (): restituisce render_template ('userHome.html') 

Salva tutte le modifiche e riavvia il server. Clicca sul Registrati link nella home page e prova ad accedere usando un indirizzo email e una password validi. In caso di convalida dell'utente, dovresti avere una pagina come mostrato di seguito:

In caso di convalida dell'utente non riuscita, l'utente verrà reindirizzato a una pagina di errore come mostrato di seguito:

Qui abbiamo usato una pagina di errore separata per visualizzare l'errore. Va bene anche se vuoi usare la stessa pagina per visualizzare il messaggio di errore. 

Limitazione dell'accesso non autorizzato alla home page dell'utente

In caso di validazione utente riuscita, un utente viene reindirizzato alla home page dell'utente. Ma al momento anche un utente non autorizzato può visualizzare la home page semplicemente sfogliando l'URL http: // localhost: 5002 / userHome. 

Per limitare l'accesso non autorizzato degli utenti, controlleremo la presenza di una variabile di sessione che verrà impostata in caso di accesso utente riuscito. Quindi importa sessione dalla fiaschetta: 

dalla sessione di importazione dei flaconi

Abbiamo anche bisogno di impostare una chiave segreta per la sessione. Così dentro app.py, dopo che l'app è stata inizializzata, imposta la chiave segreta come mostrato:

app.secret_key = 'perché dovrei dirti la mia chiave segreta?' 

Ora, dentro il validateLogin metodo, prima di reindirizzare l'utente a / UserHome all'accesso riuscito, imposta il sessione variabile come mostrato:

session ['user'] = data [0] [0]

Avanti, all'interno del UserHome metodo, controlla la variabile di sessione prima del rendering userHome.html. Se la variabile di sessione non viene trovata, reindirizza alla pagina di errore.

@ app.route ('/ userHome') def userHome (): se session.get ('utente'): restituisce render_template ('userHome.html') else: restituisce render_template ('error.html', error = 'Accesso non autorizzato ') 

Salva tutte le modifiche e riavvia il server. Senza accedere, prova a navigare su http: // localhost: 5002 / userHome e poiché non hai ancora effettuato l'accesso, dovresti essere reindirizzato alla pagina di errore.

Esecuzione del logout

L'implementazione della funzionalità di disconnessione è la più semplice. Tutto ciò che dobbiamo fare è rendere la variabile di sessione utente null e reindirizzare l'utente alla pagina principale. 

Dentro app.py, crea una nuova rotta e un nuovo metodo per disconnettersi come mostrato: 

@ app.route ('/ logout') def logout (): session.pop ('utente', None) return redirect ('/') 

Abbiamo già impostato l'href per il pulsante di disconnessione /disconnettersi. Quindi salvare tutte le modifiche e riavviare il server. Dalla home page, clicca su Registrati e prova ad accedere usando un indirizzo email e una password validi. Una volta effettuato l'accesso, fare clic su Disconnettersi pulsante nella home dell'utente e si dovrebbe essere disconnessi correttamente dall'applicazione.

Conclusione

In questa parte del tutorial, abbiamo visto come implementare la funzionalità di accesso e disconnessione dell'utente. Abbiamo anche visto come limitare l'accesso non autorizzato alle pagine dell'applicazione. Nella parte successiva di questo tutorial, implementeremo la funzionalità per l'utente che ha effettuato l'accesso per aggiungere e modificare un post di blog nell'applicazione.

Il codice sorgente di questo tutorial è disponibile su GitHub.

Fateci sapere i vostri pensieri nei commenti qui sotto!