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

În partea anterioară a acestei serii, am implementat paginarea pentru lista de dorințe de pe pagina de pornire a utilizatorului. În această parte a seriei vom implementa o opțiune pentru ca utilizatorul să încarce o imagine care să reprezinte o dorință, o opțiune pentru a marca dorința așa cum a fost realizată și o opțiune pentru a seta confidențialitatea.

Noțiuni de bază 

Să începem prin clonarea părții anterioare a tutorialului de la GitHub.

git clone https://github.com/jay3dec/PythonFlaskMySQLApp_Part5.git

Odată ce codul sursă a fost clonat, navigați la directorul de proiect și porniți serverul web. 

cd PythonFlaskMySQLApp_Part5 Python app.py

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

Modificarea interfeței utilizator

Să începem prin modificarea paginii "adăugați dorința" pentru a include o opțiune de încărcare a unei imagini. Navigheaza catre template-uri / addWish.html. Forma noastră în addWish.html arata destul de mic, asa ca sa modificam codul HTML de bootstrap pentru a face forma verticala. 

În primul rând, vom modifica formă orizontală la o formă verticală, îndepărtați astfel clasa formă orizontală din formular. De asemenea, vom adăuga trei comenzi noi: un control de încărcare a fișierelor pentru încărcarea fotografiilor, o casetă de selectare pentru a marca dorința ca fiind privată și o altă casetă de selectare pentru a marca dorința ca fiind finalizată. Aici este modificat addWish.html.

   Python Cup Bucket List App       

Python Flask App

Creați-vă dorința
Naviga…

Marchează ca privat

Marcați ca terminat

© Compania 2015

Salvați modificările de mai sus și reporniți serverul. După ce v-ați conectat cu succes, faceți clic pe Adăugați dorință și ar trebui să puteți vedea pagina modificată de adăugare a dorinței.

Implementarea funcționalității de încărcare 

Vom folosi jQuery-File-upload pentru a implementa funcționalitatea de încărcare a fișierelor. Descărcați fișierele necesare de la GitHub. Extrageți sursa și adăugați următoarele referințe de script addWish.html.

    

Pe addWish.html încărcați pagina, adăugați codul de inițiere a pluginului la butonul de încărcare a fișierului.

(url: 'upload', dataType: 'json', add: functie (e, data) data.submit ();, success: function răspuns, stare) console.log (răspuns);, eroare: funcție (eroare) console.log (eroare););)

După cum se vede în codul de mai sus, am atașat pluginul pentru încărcarea fișierelor în #fișier încărcat buton. Pluginul de încărcare a fișierelor trimite fișierul la încărcare / editorul de cereri, pe care îl vom defini în codul nostru Python. De asemenea, am definit un adăuga funcția de a trimite datele și a le defini succes și eșec apeluri de apel pentru a face față succesului de încărcare și a eșecurilor.

Apoi, să definim încărcați Încărcați fișierul de încărcare a fișierului Python în app.py. Definiți un traseu încărcare / așa cum se arată:

@ app.route ('/ upload', methods = ['GET', 'POST']) def upload ():

Verificați dacă cererea este a POST cererea și, dacă este așa, citiți fișierul din cerere.

if request.method == 'POST': file = request.files ['fișier'] 

De asemenea, va trebui să obțineți extensia de fișier imagine pentru a salva fișierul. Deci importă os și apoi împărțiți numele extensiei din numele fișierului.

extensie = os.path.splitext (file.filename) [1]

Odată ce avem extensia de fișier, vom crea un nou nume de fișier unic folosind UUID. Import UUID și să creați numele fișierului.

f_name = str (uuid.uuid4 ()) + extensie

Creați un dosar numit încărcările în dosarul static. Aici vom păstra imaginile încărcate. Adăugați calea în dosarul Încărcați în configurația aplicației.

app.config ['UPLOAD_FOLDER'] = 'static / Uploads' 

Salvați acum fișierul postat în UPLOAD_FOLDER și returnează numele fișierului ca răspuns.

fișierul.save (os.path.join (app.config ['UPLOAD_FOLDER'], f_name)) returnează json.dumps ('nume fișier': f_name)

Salvați modificările de mai sus și reporniți serverul. Punctați browser-ul dvs. la adresa http: // localhost: 5002 și conectați-vă utilizând acreditări valide. Încercați să încărcați o imagine utilizând butonul de navigare și, când ați terminat, verificați consola browserului. Ar trebui să puteți vedea numele fișierului încărcat returnat. 

În loc de câmpul de introducere numai pentru citire, să adăugăm un element de imagine pentru a afișa imaginea încărcată. Deci, înlocuiți câmpul de text de introducere numai pentru citire cu următorul cod HTML.

În apelul de reușită pentru încărcarea fișierelor, actualizați #imgUpload„s src la imaginea încărcată.

$ ( '# ImgUpload') Attr ( 'src', 'static / uploads /' + response.filename).;

Salvați modificările de mai sus și reporniți serverul. Conectați-vă la aplicație și încercați să încărcați un nou fișier imagine și ar trebui să puteți vedea imaginea încărcată.

Va trebui să ne modificăm tbl_wish pentru a include trei domenii noi. Modificați tbl_wish așa cum se arată mai jos:

ALTER TABLE 'BucketList'. 'Tbl_wish' ADAUGA COLUMN 'wish_file_path' VARCHAR (200) NULL DUPĂ 'wish_date', ADĂUGEAZĂ COLUMN 'wish_accomplished' INT NULL DEFAULT 0 DUPĂ 'wish_file_path', ADAUGA COLUMN 'wish_private' INT NULL DEFAULT 0 AFTER 'wish_accomplished „; 

Înainte să modificăm procedurile stocate sp_addWish și sp_updateWish pentru a include campurile noi adăugate în baza de date. 

Modificați sp_addWish procedură stocată pentru a include cele trei câmpuri recent adăugate.

USE 'BucketList'; Procedura DROP DACĂ EXISTĂ "sp_addWish"; (IN p_title varchar (45), IN p_description varchar (1000), IN p_user_id bigint, IN p_file_path varchar (200), IN p_is_private int, IN p_is_done int) BEGIN introduceți valorile (p_title, p_description, p_user_id, NOW (), p_file_path, p_is_private, p_is_done) în tbl_wish (wish_title, wish_description, wish_user_id, wish_date, wish_file_path, wish_private, wish_accomplished); END $$ DELIMITER; 

De asemenea, modificați procedura stocată sp_updateWish pentru a include cele trei campuri noi adăugate.

USE 'BucketList'; Procedura DROP DACĂ EXISTĂ "sp_updateWish"; (IN) p_descrierea varchar (1000), IN p_wish_id bigint, în p_user_id bigint, IN p_file_path varchar (IN_pile_path varchar (45), IN p_file_path varchar 200), int p_is_private int, IN p_is_done int) BEGIN actualizare tbl_wish set wish_title = p_title, wish_description = p_description, wish_file_path = p_file_path, wish_private = p_is_private, wish_accomplished = p_is_done unde wish_id = p_wish_id și wish_user_id = p_user_id; END $$ DELIMITER; 

Apoi, modificați / addWish a solicitat metoda handlerului de a citi câmpurile postate recent și de a le transmite procedeului stocat.

dacă request.form.get ('filePath') este Niciuna: _filePath = "else: _filePath = request.form.get ('filePath') dacă request.form.get ('privat' _private = 1 dacă request.form.get ('done') este Niciuna: _done = 0 else: _done = 1 

Odată ce valorile au fost citite, le vom trimite la apelul procedurii memorate MySQL.

cursor.callproc ( 'sp_addWish', (_ titlu, _description, _user, _filePath, _private, _done)) 

În addWish.html pagina va trebui să setați Nume atribut pentru elementele care urmează să fie postate. Adăugați Nume la ambele casete de validare nou adăugate.

 Marchează ca privat   Marcați ca terminat 

Acum, de asemenea, trebuie să trecem calea fișierului de încărcare. Așadar, vom crea un câmp de intrare ascuns și vom seta valoarea sa în apelul de reușită pentru încărcarea fișierelor.

Setați valoarea sa în apelul de reușită pentru încărcarea fișierelor.

succes: funcție (răspuns, stare) var filePath = 'static / Uploads /' + answer.filename; $ ('# imgUpload'). atr ('src', filePath); $ ( '# FILEPATH') val (FILEPATH).; 

Salvați modificările de mai sus și reporniți serverul. Conectați-vă utilizând acreditările valide și încercați să adăugați o nouă dorință, cu toate detaliile necesare. Odată adăugată cu succes, ar trebui să fie afișată pe pagina de pornire a utilizatorului.

Modificați funcția de modificare a dorințelor

În primul rând, trebuie să adăugăm un cod HTML pentru cele trei noi câmpuri. Deci, deschide-te userHome.html și adăugați următorul cod HTML după titlu și Descriere HTML.

Naviga…

Marchează ca privat

Marcați ca terminat

Va trebui să preluăm datele necesare pentru a popula câmpurile de mai sus în editare. Deci, haideți să modificăm procedura stocată sp_GetWishById pentru a include câmpurile suplimentare așa cum se arată: 

CREATE DEFINER = "root" @ 'localhost' PROCEDURA 'sp_GetWishById' (IN p_wish_id bigint, În p_user_id bigint) BEGIN selectați wish_id, wish_title, wish_description, wish_file_path, wish_private, wish_accomplished din tbl_wish where wish_id = p_wish_id and wish_user_id = p_user_id; SFÂRȘIT

Apoi, va trebui să modificăm JSON șir în / getWishById metoda rutei pentru a include noile câmpuri. Modificați lista de dorințe din / getWishById așa cum se arată:

wish.append ( 'Id': rezultat [0] [0], 'Titlu': rezultat [0] [1], 'Descriere': rezultat [0] [2], 'filepath': rezultat [0] [ 3], 'privat': rezultat [0] [4], 'Efectuat': rezultat [0] [5])

Pentru a face rezultatul, trebuie să analizăm datele primite în apelul de reușită al Editați | × Funcția JavaScript în userHome.html.

succes: funcția (res) var data = JSON.parse (res); . $ ( '# EditTitle') Val (date [0] [ 'titlul']); . $ ( '# EditDescription') val (date [0] [ 'Descriere']); $ ('# imgUpload'). attr ('src', date [0] ['FilePath']); dacă (date [0] ['privat'] == "1") $ ('chkPrivate').  dacă (date [0] ['terminat'] == "1") $ ('chkDone').  $ ('# editModal'). modal (); 

Salvați modificările și reporniți serverul. Conectați-vă utilizând acreditările valide și, atunci când vă aflați pe pagina de pornire a utilizatorului, încercați să editați o dorință din lista de dorințe. Ar trebui să aveți datele populate în fereastra de editare.

Acum, similar cu ceea ce am făcut în pagina de adăugare a dorinței, adăugați referința scriptului jQuery-File-Upload în userHome.html.

    

Inițializați controlul de încărcare a fișierelor în fereastra de editare utilizând același cod pe care l-am utilizat în pagina de adăugare a dorințelor.

(url: 'upload', dataType: 'json', add: functie (e, data) data.submit ();, success: function răspuns, stare) var filePath = 'static / Uploads /' + răspuns.filename; $ ('# imgUpload'). , eroare: funcția (eroare) console.log (eroare););)

În continuare, trebuie să modificăm butonul Actualizați clic în fereastra de editare pentru a include câmpurile suplimentare adăugate. Deci, în btnUpdate faceți clic pe butonul, modificați parametrii de date transmise pentru a include cele trei câmpuri noi, după cum se arată:

date: ('editTitle') val (), descriere: $ ('# editDescription') val (), id: localStorage.getItem ) .attr ( 'src'), isPrivate:. $ ( '# chkPrivate') este ( ': verificat') 1: 0, isDone:. $ ( '# chkDone') este (? ': verificat') 1 : 0

Deschide app.py și modificați / updateWish metoda de manipulare a cererii pentru a analiza câmpurile recent adăugate.

_filePath = request.form ['filePath'] _isPrivate = request.form ['estePrivate'] _isDone = request.form ['isDone'] 

Modificați metoda de apelare a procedurii pentru a include parametrii suplimentari.

cursor.callproc ( 'sp_updateWish', (_ titlu, _description, _wish_id, _user, _filePath, _isPrivate, _isDone))

Deschide acum sp_updateWish și modificați-o pentru a include câmpurile recent adăugate.

(IN) p_description varchar (1000), IN p_wish_id bigint, în p_user_id bigint, IN p_file_path varchar (200), IN p_is_private int , IN p_is_done int) BEGIN actualizare tbl_wish set wish_title = p_title, wish_description = p_description, wish_file_path = p_file_path, wish_private = p_is_private, wish_accomplished = p_is_done unde wish_id = p_wish_id și wish_user_id = p_user_id; SFÂRȘIT

Salvați toate modificările de mai sus și reporniți serverul. Conectați-vă utilizând acreditările valide și încercați să editați și să actualizați intrările existente.

Înfășurați-o

În această parte a seriei tutorial, am văzut cum să integrăm și să folosim plug-inul jQuery-File-Upload pentru a încărca imagini în aplicația Python Flask. În următoarea parte a acestei serii, vom arăta dorințele realizate de utilizatori pe pagina de pornire a aplicației și vom adăuga funcționalitatea dorințelor.

Spuneți-ne gândurile, corecțiile și sugestiile din comentariile de mai jos. Codul sursă din acest tutorial este disponibil pe GitHub.

Cod