This shows you the differences between two versions of the page.
|
isi:laboratoare:06 [2025/11/09 23:15] alexandru.predescu |
isi:laboratoare:06 [2025/11/15 10:58] (current) alexandru.predescu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Laboratorul 06. Arhitectura client-server ===== | + | ===== Laboratorul 06. Arhitectura client-server. Python Flask ===== |
| ==== Obiective laborator ==== | ==== Obiective laborator ==== | ||
| Line 119: | Line 119: | ||
| * **404 Not Found**: Resursa nu există | * **404 Not Found**: Resursa nu există | ||
| * **500 Internal Server Error**: Eroare pe server | * **500 Internal Server Error**: Eroare pe server | ||
| + | |||
| + | ==== Plan Laborator ==== | ||
| === Setup === | === Setup === | ||
| 1. Pentru a începe, asigurați-vă că aveți instalat [[https://www.python.org/downloads/|Python]]. | 1. Pentru a începe, asigurați-vă că aveți instalat [[https://www.python.org/downloads/|Python]]. | ||
| + | |||
| + | **Nu aveți Python?** > [[https://www.python.org/downloads/|python.org/downloads]] (bifați "Add to PATH" la instalare!) | ||
| 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]]. | 3. Descarcati scheletul de cod de [[https://github.com/ACS-ISI/Backend_Server|aici]]. | ||
| + | |||
| + | <code bash> | ||
| + | git clone https://github.com/ACS-ISI/Backend_Server | ||
| + | cd Backend_Server | ||
| + | </code> | ||
| + | |||
| + | **Nu aveți git?** > Descărcați ZIP de pe GitHub > Extract | ||
| <note> | <note> | ||
| Line 152: | Line 163: | ||
| </note> | </note> | ||
| + | |||
| + | **Salvați fișierul după fiecare modificare. Serverul se restartează automat (debug mode).** | ||
| 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 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//. | ||
| Line 164: | Line 177: | ||
| 5. Dupa finalizarea primului **TO DO** pentru testare descarcati postman de [[https://www.postman.com/downloads/|aici]]. | 5. Dupa finalizarea primului **TO DO** pentru testare descarcati postman de [[https://www.postman.com/downloads/|aici]]. | ||
| + | <note tip> | ||
| + | Tutorial testare cu Postman: | ||
| + | |||
| + | 1. **New Request**: | ||
| + | * Method: `PUT` | ||
| + | * URL: `http://localhost:5000/tasks/1` (înlocuiți `1` cu ID-ul unui task existent) | ||
| + | |||
| + | 2. **Body > raw > JSON**: | ||
| + | |||
| + | <code json> | ||
| + | { | ||
| + | "completed": true | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | 3. **Send** | ||
| + | |||
| + | **Rezultat așteptat:** | ||
| + | |||
| + | <code json> | ||
| + | { | ||
| + | "id": 1, | ||
| + | "title": "Finalizează laboratorul", | ||
| + | "description": "Task 1 și Task 2", | ||
| + | "completed": true | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | </note> | ||
| + | |||
| <note tip> | <note tip> | ||
| Line 187: | Line 230: | ||
| === Task === | === Task === | ||
| - | 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**. Pentru paginare, puneti doi parametri: page (numarul paginii) si limit (numar de inregistrari per pagina). 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> | ||
| **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. | **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. | ||
| Line 225: | Line 268: | ||
| + | == Probleme Comune == | ||
| - | === [Q&A] === | + | Eroare: "ModuleNotFoundError: No module named 'flask'" |
| + | **Soluție**: Nu ai instalat dependențele. Rulează: | ||
| + | |||
| + | <code bash> | ||
| + | pip install -r requirements.txt | ||
| + | </code> | ||
| + | |||
| + | Eroare: "Address already in use" | ||
| + | **Soluție**: Portul 5000 este deja folosit. Oprește procesul anterior sau schimbă portul: | ||
| + | |||
| + | <code python> | ||
| + | app.run(debug=True, port=5001) | ||
| + | </code> | ||
| + | |||
| + | Eroare: "404 Not Found" când testezi în Postman | ||
| + | |||
| + | **Verificări**: | ||
| + | |||
| + | * Serverul Flask rulează? (vezi în terminal) | ||
| + | * URL-ul este corect? (ex: `http://localhost:5000/tasks`) | ||
| + | * Metoda HTTP este corectă? (GET, POST, etc.) | ||
| + | |||
| + | Date nu apar în baza de date | ||
| + | |||
| + | **Verificări**: | ||
| + | |||
| + | * Ai apelat `db.session.commit()`? | ||
| + | * Nu sunt erori în consolă? | ||
| + | * Verifică cu DB Browser dacă fișierul `tasks.db` există în folder-ul `instance` | ||
| + | |||
| + | |||
| + | ==== [Q&A] ==== | ||
| == De ce trecem de la Firebase la Flask? == | == De ce trecem de la Firebase la Flask? == | ||
| Line 277: | Line 352: | ||
| * Planifici să scalezi aplicația | * Planifici să scalezi aplicația | ||
| * Vrei să înveți cum funcționează cu adevărat un backend | * Vrei să înveți cum funcționează cu adevărat un backend | ||
| + | |||
| + | |||
| + | ==== Resurse Utile ==== | ||
| + | |||
| + | == Documentație == | ||
| + | |||
| + | * [Flask Official Docs](https://flask.palletsprojects.com/) | ||
| + | * [Flask-SQLAlchemy Quickstart](https://flask-sqlalchemy.readthedocs.io/en/stable/quickstart/) | ||
| + | * [HTTP Status Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) | ||
| + | * [REST API Best Practices](https://restfulapi.net/) | ||
| + | |||
| + | == Tutoriale Video == | ||
| + | |||
| + | * [Flask Tutorial for Beginners](https://www.youtube.com/watch?v=Z1RJmh_OqeA) | ||
| + | * [Building a REST API with Flask](https://www.youtube.com/watch?v=s_ht4AKnWZg) | ||
| + | |||
| + | == Cheat sheets == | ||
| + | |||
| + | * [Flask Cheat Sheet](https://s3.us-east-2.amazonaws.com/prettyprinted/flask_cheatsheet.pdf) | ||
| + | * [SQLAlchemy Cheat Sheet](https://www.pythonsheets.com/notes/python-sqlalchemy.html) | ||