This shows you the differences between two versions of the page.
isi:laboratoare:06 [2024/11/08 21:28] alexandru.predescu [Obiective laborator] |
isi:laboratoare:06 [2024/11/11 11:43] (current) alexandru.predescu [Obiective laborator] |
||
---|---|---|---|
Line 56: | Line 56: | ||
2. Verificați instalarea rulând comanda în terminal: ''python --version''. | 2. Verificați instalarea rulând comanda în terminal: ''python --version''. | ||
+ | |||
+ | 3. Descarcati scheletul de cod de [[https://github.com/ACS-ISI/Backend_Server|aici]]. | ||
<note> | <note> | ||
Dacă aveți mai multe versiuni de Python instalate, selectați versiunea dorită astfel: ''py -3'' (3.x) sau ''python3'' (pe Linux), respectiv versiunea de package manager: ''py -3 -m pip'' sau ''pip3'' (pe Linux) | Dacă aveți mai multe versiuni de Python instalate, selectați versiunea dorită astfel: ''py -3'' (3.x) sau ''python3'' (pe Linux), respectiv versiunea de package manager: ''py -3 -m pip'' sau ''pip3'' (pe Linux) | ||
- | Pentru a instala dependențele specificate într-un fișier: | + | Pentru a instala dependențe folosim package manager-ul ''pip'': |
+ | |||
+ | ''pip install flask flask-sqlalchemy'' | ||
+ | |||
+ | Pentru a instala dependențele specificate într-un fișier folosim flag-ul ''-r'': | ||
''py -3 -m pip install -r requirements.txt'' | ''py -3 -m pip install -r requirements.txt'' | ||
Line 67: | Line 73: | ||
Alternativă pentru Linux: | Alternativă pentru Linux: | ||
+ | |||
+ | ''pip install -r requirements.txt'' | ||
''pip3 install -r requirements.txt'' | ''pip3 install -r requirements.txt'' | ||
+ | |||
+ | ''python app.py'' | ||
''python3 app.py'' | ''python3 app.py'' | ||
Line 74: | Line 84: | ||
</note> | </note> | ||
- | 3. Descarcati scheletul de cod de [[https://github.com/ACS-ISI/Backend_Server|aici]]. | + | 4. Deschideti proiectul folosind IDE-ul preferat, de exemplu Visual Studio Code cu extensia Python sau un IDE specializat pentru Python, precum [[https://www.jetbrains.com/pycharm/|PyCharm]] și rulați comanda pentru instalarea dependențelor din fișierul //requirements.txt//. |
- | + | ||
- | 4. Deschideti proiectul folosind IDE-ul preferat, de exemplu [[https://www.jetbrains.com/pycharm/|PyCharm]] si rulati comenzile urmatoare in terminal: ''pip install flask flask-sqlalchemy''. | + | |
<note tip> | <note tip> | ||
- | **Flask-SQLAlchemy** este o extensie a framework-ului Flask care facilitează lucrul cu baze de date relaționale în aplicațiile Python. | + | [[https://flask-sqlalchemy.readthedocs.io/en/stable/|Flask-SQLAlchemy]] este o extensie a framework-ului Flask care facilitează lucrul cu baze de date relaționale în aplicațiile Python. |
- | Vom folosi **Flask-SQLAlchemy** pentru a crea o bază de date **in-memory**, fără a fi necesară configurarea unui server SQL dedicat. | + | Vom folosi **Flask-SQLAlchemy** pentru a crea o bază de date SQLite (pentru simplitate), fără a fi necesară configurarea unui server SQL dedicat. |
</note> | </note> | ||
Line 88: | Line 96: | ||
+ | <note tip> | ||
+ | |||
+ | De obicei, cererile de tip GET nu conțin date în body și se parametrizează astfel: | ||
+ | |||
+ | Exemplu cereri GET cu parametru în URL: | ||
+ | |||
+ | ''http://localhost:5000/login?username=alex&password=1234'' | ||
+ | |||
+ | <code python> | ||
+ | @app.route('/login', methods=['GET']) | ||
+ | def login(): | ||
+ | username = request.args.get('username') | ||
+ | print(username) | ||
+ | password = request.args.get('password') | ||
+ | print(password) | ||
+ | return jsonify({"status": True}) | ||
+ | </code> | ||
+ | |||
+ | </note> | ||
=== Task === | === Task === | ||
Line 93: | Line 120: | ||
Completati **TO DO**-urile din scheletul de cod, acestea sunt **self explanatory**. Scopul acestora este sa intelegeti cum sa interactionati cu o baza de date prin intermediul unui **server**. Prin aceste metode numite **endpoint-uri** puteti realiza comunicarea dintre client si server. | Completati **TO DO**-urile din scheletul de cod, acestea sunt **self explanatory**. Scopul acestora este sa intelegeti cum sa interactionati cu o baza de date prin intermediul unui **server**. Prin aceste metode numite **endpoint-uri** puteti realiza comunicarea dintre client si server. | ||
<note tip> | <note tip> | ||
- | **Cititi comentariile din schelet!** | + | **Urmăriți comentariile din schelet** și tutorialul Flask-SQLAlchemy [[https://flask-sqlalchemy.readthedocs.io/en/stable/quickstart/|Quick Start]] pentru a implementa operațiile cu baza de date necesare pentru implementarea funcționalităților de lucru cu datele. Alternativ, folosiți direct biblioteca [[https://docs.python.org/3/library/sqlite3.html|sqlite3]] (vezi exemple în scheletul de cod) pentru a interoga baza de date folosind sintaxă SQL. |
</note> | </note> | ||
Line 102: | Line 129: | ||
**Test Case:** am adaugat 3 task-uri folosind endpoint-ul de adaugat task-uri, iar cand apelez endpoint-ul prin care obtin o lista cu task-uri | **Test Case:** am adaugat 3 task-uri folosind endpoint-ul de adaugat task-uri, iar cand apelez endpoint-ul prin care obtin o lista cu task-uri | ||
acesta returneaza cele 3 task-uri adaugate anterior. | acesta returneaza cele 3 task-uri adaugate anterior. | ||
+ | |||
+ | **Verificați funcționarea aplicației folosind următoarele metode:** | ||
+ | |||
+ | == Testarea endpoint-urilor cu Postman == | ||
{{:isi:laboratoare:postmantutorial.png?700|}} | {{:isi:laboratoare:postmantutorial.png?700|}} | ||
Line 110: | Line 141: | ||
2. Pentru a adauga calea verificati adnotarea fiecarui endpoint (@app.route("/task/cale")). | 2. Pentru a adauga calea verificati adnotarea fiecarui endpoint (@app.route("/task/cale")). | ||
- | 3. Verificati tipul metodei (POST/ GET/ ETC.) | + | 3. Verificati tipul metodei (POST/ GET/ etc.) |
</note> | </note> | ||
+ | |||
+ | == Explorarea bazei de date cu SQLite Browser == | ||
+ | |||
+ | Instalați [[https://sqlitebrowser.org/|DB Browser for SQLite]] (versiunea portabilă). Acesta vă permite să accesați o bază de date SQLite folosind un editor vizual. Verificați conținutul bazei de date: deschideți din editor fișierul **tasks.db** din folder-ul **instance** | ||
+ | |||
+ | {{:isi:laboratoare:lab6:sqlite_browser.png?600|}} | ||
+ | |||
+ | == Testarea end-to-end cu aplicația web client == | ||
+ | |||
+ | Rulați aplicația client din folder-ul //frontend// prin deschiderea fișierului //index.html// cu un browser. Verificați funcționarea sistemului integrat client-server. Examinați codul aplicației, identificați modul în care se transmit cererile HTTP și cum se realizează interfața cu utilizatorul. | ||
+ | |||