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