Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
python_web [2021/10/14 14:49] enrique_mieza_sanchez [Python Web amb Flask] |
python_web [2022/12/13 18:43] (actual) enric_mieza_sanchez [Testing] |
||
---|---|---|---|
Línia 11: | Línia 11: | ||
- **Bottle** : microframework | - **Bottle** : microframework | ||
+ | Referències: | ||
+ | * Per desenvolupar en Python necessitarem [[Python venv]] | ||
+ | * L' | ||
+ | |||
+ | {{tag> #Daw #DawMpDual #DawMp07Uf1 # | ||
+ | |||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Videotutorials ===== | ||
Aquest article també el tens en [[https:// | Aquest article també el tens en [[https:// | ||
Línia 17: | Línia 27: | ||
{{youtube> | {{youtube> | ||
- | + | \\ | |
- | {{tag> #Daw #DawMpDual #DawMp07Uf1 # | + | |
===== Instal·lació ===== | ===== Instal·lació ===== | ||
Necessitem Python 3, que ja sol venir instal·lat. Si no fos així, pots instal·lar-ho amb: | Necessitem Python 3, que ja sol venir instal·lat. Si no fos així, pots instal·lar-ho amb: | ||
- | | + | |
- | + | ||
- | A més, necessitem **pip3**, el gestor de paquets per a Python més conegut: | + | |
- | + | ||
- | $ sudo apt install python3-pip | + | |
- | + | ||
- | Ara podrem instal·lar el paquet **virtualenv**, | + | |
- | + | ||
- | $ sudo pip3 install virtualenv | + | |
- | + | ||
- | Podem comprovar les llibreries instal·lades en el sistema operatiu fent | + | |
- | + | ||
- | $ pip3 freeze | + | |
- | + | ||
- | Podem crear ara, un entorn de test: | + | |
- | + | ||
- | $ virtualenv envtest | + | |
- | + | ||
- | Activem el virtualenv: | + | |
- | + | ||
- | $ source envtest/ | + | |
- | + | ||
- | Veureu que el //prompt// ara indica el nom del virtualenv. Si ara mirem les llibreries veurem que està buit: | + | |
- | + | ||
- | (envtest) $ pip3 freeze | + | |
- | Podem instal·lar la primera llibreria, per exemple: | + | Necessitem crear un [[python_venv|entorn virtual de Python]]. La manera més senzilla és: |
- | (envtest) | + | |
- | Si comproveu | + | I podem activar el nostre entorn |
- | En qualsevol moment podem sortir del nostre virtualenv amb la instrucció '' | + | $ source env/ |
- | (envtest) $ deactivate | + | Per saber més sobre els entorns virtuals de Python visiteu l' |
\\ | \\ | ||
Línia 69: | Línia 54: | ||
Dins el nostre projecte crearem un virtualenv on posarem les nostres llibreries: | Dins el nostre projecte crearem un virtualenv on posarem les nostres llibreries: | ||
- | $ virtualenv | + | $ python -m venv env |
$ source env/ | $ source env/ | ||
(env) $ pip3 install flask | (env) $ pip3 install flask | ||
Línia 75: | Línia 60: | ||
Ara ja podem mirar [[https:// | Ara ja podem mirar [[https:// | ||
- | (env) $ gedit web.py | + | (env) $ gedit web.py |
- | + | ||
- | Per simplificar una mica, podem afegir al codi inicial dues línies al final de l' | + | |
- | <sxh python> | + | |
- | if __name__ == " | + | |
- | app.run() | + | |
- | </ | + | |
I ara podrem arrencar la aplicació //Hello World// amb: | I ara podrem arrencar la aplicació //Hello World// amb: | ||
- | (env) $ python3 | + | (env) $ flask --app web run |
Podeu visitar la web //Hello World// apuntant el vostre navegador a '' | Podeu visitar la web //Hello World// apuntant el vostre navegador a '' | ||
+ | \\ | ||
===== Avançant amb Flask ===== | ===== Avançant amb Flask ===== | ||
- | ==== Aplicació mínima ==== | ||
- | Com podeu veure al [[https:// | ||
- | |||
- | Li hem afegit una línia més per arrencar l' | ||
- | <file python web.py> | ||
- | from flask import Flask | ||
- | app = Flask(__name__) | ||
- | |||
- | @app.route('/' | ||
- | def hello_world(): | ||
- | return ' | ||
- | |||
- | # arranquem l' | ||
- | if __name__ == " | ||
- | app.run(debug=True) | ||
- | </ | ||
- | |||
- | Arrencant amb '' | ||
- | (env) $ python web.py | ||
- | |||
- | I mirar el resultat apuntant el //browser// a: | ||
- | http:// | ||
==== Routing ==== | ==== Routing ==== | ||
Línia 120: | Línia 78: | ||
<file python web.py> | <file python web.py> | ||
+ | #... codi previ... | ||
+ | |||
@app.route('/ | @app.route('/ | ||
def hello(): | def hello(): | ||
return 'Hello again!' | return 'Hello again!' | ||
+ | |||
+ | #...mes codi... | ||
</ | </ | ||
Línia 164: | Línia 126: | ||
</ | </ | ||
- | ==== Variables globals (shhht! q no ho senti ningú!) ==== | + | \\ |
- | En un entorn web no és recomanable utilitzar variables globals. O més aviat, no podem utilitzar-les com solem fer-ho en les aplicacions | + | |
+ | ===== Variables globals (shhht! q no ho senti ningú!) | ||
+ | En un entorn web no és recomanable utilitzar variables globals. O més aviat, no podem utilitzar-les com solem fer-ho en aplicacions | ||
De fet, sí que es poden fer servir, però no es pot confiar en què en la següent execució la variable global es mantingui. El servidor web, depenent de la seva càrrega, pot destruir el procés d' | De fet, sí que es poden fer servir, però no es pot confiar en què en la següent execució la variable global es mantingui. El servidor web, depenent de la seva càrrega, pot destruir el procés d' | ||
Línia 285: | Línia 249: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
- | |||
- | |||
- | |||
\\ | \\ | ||
- | ===== Testing | + | ===== Per a saber-ne més ===== |
- | Anem a veure com podem testejar | + | Hem fet un repàs de les funcions bàsiques del // |
- | Fem-li un cop d'ull a la [[https:// | + | * Persistència en base de dades |
+ | * Sessions | ||
- | Primera cosa que cal fer, instal·lar el mòdul de tests '' | ||
- | (env) $ pip install pytest | ||
- | Després, ens diuen que fem un **test skeleton**, però l' | + | També hi ha aquest cursos |
+ | | ||
+ | * [[https://platzi.com/cursos/flask/ | ||
- | Nosaltres implementarem una versió simplificada sobre l' | + | \\ |
- | <file python test_web.py > | ||
- | import pytest | ||
- | from web import | + | ===== Exercici : login ===== |
+ | <WRAP todo> | ||
+ | Pàgina de login de l'app: | ||
- | @pytest.fixture | ||
- | def client(): | ||
- | with app.test_client() as client: | ||
- | yield client | ||
- | |||
- | def test_landing_page(client): | ||
- | rv = client.get('/' | ||
- | assert b' | ||
- | </ | ||
- | |||
- | Correm els tests amb la comanda '' | ||
- | < | ||
- | (env) $ pytest | ||
- | ============================ test session starts ============================= | ||
- | platform linux -- Python 3.8.10, pytest-6.2.5, | ||
- | rootdir: / | ||
- | collected 1 item | ||
- | |||
- | test_web.py . [100%] | ||
- | |||
- | ============================= 1 passed in 0.09s ============================== | ||
- | </ | ||
- | |||
- | **Com podem veure, '' | ||
- | |||
- | ==== Exercici ==== | ||
- | <WRAP todo> | ||
- | Examina [[https:// | ||
* Crea un formulari que demani usuari i contrasenya. El formulari s' | * Crea un formulari que demani usuari i contrasenya. El formulari s' | ||
* Crea una pàgina (per POST) que respongui al formulari d' | * Crea una pàgina (per POST) que respongui al formulari d' | ||
* Assegura' | * Assegura' | ||
* **Comprova manualment el punt anterior. Abans de fer els tests automàtics cal fer-los manuals PER A TOTS ELS CASOS** (tant si funciona OK, com si dona error). | * **Comprova manualment el punt anterior. Abans de fer els tests automàtics cal fer-los manuals PER A TOTS ELS CASOS** (tant si funciona OK, com si dona error). | ||
- | * Afegeix dues funcions de test que comprovin el següent: | ||
- | - Que els usuaris i contrasenyes que has // | ||
- | - Que una combinació usuari/ | ||
</ | </ | ||
\\ | \\ | ||
- | ===== Per a saber-ne més ===== | + | ===== Testing i + ===== |
- | Hem fet un repàs de les funcions bàsiques del // | + | |
- | * Persistència en base de dades | + | Aquest article continua a [[Python Web Test]] i a [[Docker |
- | * Sessions | + | |
- | + | ||
- | + | ||
- | També hi ha aquest cursos que poden ser interessants: | + | |
- | * [[https:// | + | |
- | * [[https:// | + | |
\\ | \\ | ||