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.
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.
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
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.
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.
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.
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 !!
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
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.
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.
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.
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!