Crearea unei aplicații Web de la zero utilizând Python Flack și MySQL Partea 2

În partea anterioară a acestei serii am văzut cum să începem cu Python Flask și MySQL și am implementat porțiunea de înregistrare a utilizatorilor din aplicația noastră. În acest tutorial, vom trece la nivelul următor prin implementarea funcției de conectare și deconectare a aplicației noastre.

Noțiuni de bază

Mai întâi clonați codul sursă al tutorialului anterior de la GitHub.

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

Odată ce codul sursă a fost clonat, navigați la PythonFlaskMySQLApp --- Part-1 și porniți serverul.

python app.py

Punctați browser-ul dvs. la http: // localhost: 5002 și ar trebui să aveți aplicația să ruleze.

Crearea interfeței de conectare

Navigheaza catre PythonFlaskMySQLApp --- Partea-1 / template-uri și să creați un nou fișier numit signin.html. Deschis signin.html și adăugați următorul cod HTML:

   Python Cup Bucket List App       

Python Flask App

Lista de aplicații Bucket

© Compania 2015

Deschis app.py și adăugați o nouă rută pentru interfața de conectare.

@ app.route ('/ showSignin') def showSignin (): returnați render_template ('signin.html') 

Apoi, deschide-te index.html și signup.html, și adăugați href link pentru conectare la ambele pagini ca / showSignin. Salvați toate modificările și reporniți serverul. 

python app.py

Punctați browser-ul dvs. la http: // localhost: 5002 și faceți clic pe Conectare și ar trebui să vedeți pagina de conectare.

Implementarea conectării

Acum, trebuie să creați o funcție pentru validarea autentificării utilizatorului. La apăsare Conectare vom posta adresa de e-mail și parola introduse la funcția de validare a utilizatorului.

Crearea unei proceduri stocate 

Pentru a valida un utilizator, avem nevoie de o procedură memorată MySQL. Deci, creați o procedură memorată MySQL după cum se arată:

DELIMITER $$ CREATE DEFINER = "root" @ 'localhost' PROCEDURĂ 'sp_validateLogin' (IN p_username VARCHAR (20)) BEGIN select * din tbl_user unde user_username = p_username; END $$ DELIMITER; 

Vom primi detaliile utilizatorului în funcție de nume de utilizator din baza de date MySQL folosind sp_validateLogin. Odată ce avem parola hashed, o vom valida împotriva parolei introduse de utilizator.

Validați metoda de utilizare

Creați o metodă de validare a utilizatorului pe care o vom apela atunci când utilizatorul va trimite formularul:

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

După cum se vede în codul de mai sus, am citit adresa de e-mail și parola postate în _nume de utilizator și _parola. Acum o să sunăm sp_validateLogin procedura cu parametrul _nume de utilizator. Deci, creați o conexiune MySQL în interiorul validateLogin metodă:

con = mysql.connect ()

Odată ce conexiunea a fost creată, creați o cursor folosind con conexiune.

cursor = con.cursor ()

Folosind cursorul, apelați procedura memorată MySQL după cum se arată:

cursor.callproc ( 'sp_validateLogin', (_ numele de utilizator,))

Obțineți înregistrările preluate din cursor după cum se arată:

data = cursor.fetchall ()

Dacă datele au unele înregistrări, vom potrivi parola preluată cu parola introdusă de utilizator.

dacă 'len' (data)> 0: dacă check_password_hash (str (date [0] [3]), _ parola): return redirect ('/ userHome') else: return render_template ('error.html', error = sau parola. ') else: returnați render_template (' error.html ', error =' Adresa de e-mail greșită sau parola. ')

După cum se vede în codul de mai sus, am folosit o metodă numită check_password_hash pentru a verifica dacă parola hash returnată corespunde cu parola introdusă de utilizator. Dacă totul este bun atunci vom redirecționa utilizatorul la userHome.html. Și dacă există o eroare, vom afișa error.html cu mesajul de eroare.

Aici este completă validateLogin cod:

@ app.route ('/ validateLogin', methods = ['POST']) def validateLogin (): încercați: _username = request.form ['inputEmail'] _password = request.form ['inputPassword'] # connect to mysql con = mysql.connect () cursor = con.cursor () cursor.callproc ('sp_validateLogin', (_ username,)) data = cursor.fetchall ('/ UserHome') altfel: returna render_template ('error.html', error = 'Adresă de e-mail sau parolă greșită): session [' user '] = data [0] [0] ') else: returnați render_template (' error.html ', error =' Adresa de e-mail greșită sau parola. ') cu excepția Excepție ca e: return render_template (' error.html ' () con.close () 

Creați o pagină numită userHome.html în dosarul șabloane și adăugați următorul cod HTML:

   Python Cup Bucket List App      

Python Flask App

Bine ai venit acasa !!

© Compania 2015

Creați de asemenea o pagină de eroare numită error.html în template-uri și adăugați următorul cod HTML:

   Acces neautorizat :: Aplicația listei Bucket Python     

Python Flask App

eroare

© Compania 2015

Interior error.html avem un element așa cum este arătat:

eroare

Valoarea variabilei poate fi trecută de la render_template funcția și poate fi setat dinamic.

În cazul conectării reușite, redirecționăm utilizatorul către pagina de pornire a utilizatorului, astfel că trebuie să creați un traseu numit / userHome așa cum se arată:

@ app.route ('/ userHome') def userHome (): returnați render_template ('userHome.html') 

Salvați toate modificările și reporniți serverul. Faceți clic pe Conectare link în pagina de pornire și încercați să vă conectați utilizând o adresă de e-mail și o parolă valide. În cazul validării cu succes a utilizatorului, trebuie să aveți o pagină așa cum este arătată mai jos:

În cazul unei validări nereușite a utilizatorului, utilizatorul va fi redirecționat către o pagină de eroare după cum se arată mai jos:

Aici am folosit o pagină de eroare separată pentru a afișa eroarea. De asemenea, este bine dacă doriți să utilizați aceeași pagină pentru a afișa mesajul de eroare. 

Restricționarea accesului neautorizat la pagina de pornire a utilizatorului

În cazul validării cu succes a unui utilizator, utilizatorul este redirecționat către pagina principală a utilizatorului. Dar chiar acum un utilizator neautorizat poate vedea pagina de pornire vizitând pur și simplu URL-ul http: // localhost: 5002 / userHome. 

Pentru a restricționa accesul neautorizat al utilizatorilor, vom verifica o variabilă de sesiune pe care o vom seta pentru autentificarea reușită a utilizatorilor. Deci importă sesiune din balon: 

din sesiunea de import a balonului

De asemenea, trebuie să setăm o cheie secretă pentru sesiune. Așa că app.py, după ce aplicația a fost inițializată, setați cheia secretă așa cum este prezentat:

app.secret_key = 'De ce ți-aș spune cheia ta secretă?' 

Acum, în interiorul validateLogin înainte de a redirecționa utilizatorul către / userHome la conectarea reușită, setați sesiune variabilă după cum se arată:

sesiune ['user'] = date [0] [0]

Apoi, în interiorul userHome , verificați variabila sesiunii înainte de redare userHome.html. Dacă nu sa găsit variabila de sesiune, redirecționați către pagina de eroare.

@ app.route ('/ userHome') def userHome (): if session.get ('user'): return render_template ('userHome.html') alt: return render_template ('error.html', error = 'Acces neautorizat „) 

Salvați toate modificările și reporniți serverul. Fără a vă conecta, încercați să navigați la http: // localhost: 5002 / userHome și din moment ce nu v-ați conectat încă, ar trebui să fiți redirecționat (ă) la pagina de eroare.

Implementarea deconectării

Implementarea funcției de logout este cea mai simplă. Tot ce trebuie să facem este să facem variabila sesiunii utilizator null și redirecționați utilizatorul către pagina principală. 

Interior app.py, creați o nouă rută și o metodă pentru logout așa cum se arată: 

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

Am setat deja href pentru butonul de deconectare la / logout. Deci, salvați toate modificările și reporniți serverul. Din pagina de pornire, faceți clic pe Conectare și încercați să vă conectați utilizând o adresă de e-mail și o parolă valide. După ce v-ați conectat, faceți clic pe Deconectare buton în casa utilizatorului și ar trebui să vă deconectați cu succes de la aplicație.

Concluzie

În această parte a tutorialului, am văzut cum să implementăm funcția de conectare la utilizator și logout. De asemenea, am văzut cum să restricționăm accesul neautorizat la paginile aplicației. În următoarea parte a acestui tutorial, vom implementa funcționalitatea pentru utilizatorul conectat pentru a adăuga și edita o postare de blog în aplicație.

Codul sursă din acest tutorial este disponibil pe GitHub.

Spuneți-ne gândurile dvs. în comentariile de mai jos!

Cod