bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


python_web

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
python_web [2022/11/29 19:16]
enric_mieza_sanchez [Creant el primer projecte]
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'article segueix a [[Python Web Test]]
 +
 +{{tag> #Daw #DawMpDual #DawMp07Uf1 #DawMp07Uf02 #DawMp07Uf03 #DawMp07Uf04 #DawMp07Uf1 #DawMp07Uf02 #DawMp07Uf03 #DawMp07Uf04 #Ciber #CiberMp03 #Ceti #CetiMp03 python web flask }}
 +
 +
 +\\
 +
 +===== Videotutorials =====
 Aquest article també el tens en [[https://www.youtube.com/watch?v=bHg1b0XcU3g|dues parts en format vídeotutorial a Youtube]] explicat pas a pas. Aquest article també el tens en [[https://www.youtube.com/watch?v=bHg1b0XcU3g|dues parts en format vídeotutorial a Youtube]] explicat pas a pas.
  
Línia 17: Línia 27:
 {{youtube>pv1_CPLg4xw}} {{youtube>pv1_CPLg4xw}}
  
- +\\
-{{tag> #Daw #DawMpDual #DawMp07Uf1 #DawMp07Uf02 #DawMp07Uf03 #DawMp07Uf04 #DawMp07Uf1 #DawMp07Uf02 #DawMp07Uf03 #DawMp07Uf04 #Ciber #CiberMp03 #Ceti #CetiMp03 }}+
  
 ===== Instal·lació ===== ===== Instal·lació =====
Línia 117: Línia 126:
 </WRAP> </WRAP>
  
-==== 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 corrents. Les aplicacions web s'executen en algun servidor web (Apache, Nginx) o servidor d'aplicacions (uwsgi, gunicorn, Heroku).+ 
 +===== 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 d'escriptori. Les aplicacions web s'executen en algun servidor web (Apache, Nginx) o servidor d'aplicacions (uwsgi, gunicorn, Heroku).
  
 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'execució de la teva aplicació web, i quan tornes a sol·licitar la web, es torna a posar en marxa tot des de zero (i, per tant, destruint les variables globals). 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'execució de la teva aplicació web, i quan tornes a sol·licitar la web, es torna a posar en marxa tot des de zero (i, per tant, destruint les variables globals).
Línia 238: Línia 249:
   * [[https://jinja.palletsprojects.com/en/2.11.x/templates/#include|Includes]] és una senzilla manera d'afegir capçalera i //footers// iguals a totes les nostres pàgines. Us recomano utilitzar això per començar.   * [[https://jinja.palletsprojects.com/en/2.11.x/templates/#include|Includes]] és una senzilla manera d'afegir capçalera i //footers// iguals a totes les nostres pàgines. Us recomano utilitzar això per començar.
   * [[https://jinja.palletsprojects.com/en/2.11.x/templates/#template-inheritance|Herència de plantilles]] és un mètode una mica més sofisticat amb alguns avantatges, però costa una mica més d'entendre. Cal definir una pàgina //master// dividida en ''blocks'' o seccions, i després derivar les pàgines filles (on podem definir o sobreescriure cada ''block'').   * [[https://jinja.palletsprojects.com/en/2.11.x/templates/#template-inheritance|Herència de plantilles]] és un mètode una mica més sofisticat amb alguns avantatges, però costa una mica més d'entendre. Cal definir una pàgina //master// dividida en ''blocks'' o seccions, i després derivar les pàgines filles (on podem definir o sobreescriure cada ''block'').
- 
- 
- 
  
 \\ \\
  
-===== Testing ===== +===== Per a saber-ne més ===== 
-Anem a veure com podem testejar les nostres aplicacions fetes amb Flask.+Hem fet un repàs de les funcions bàsiques del //framework// Flask. Ens queda un parell de temes per cobrir tots els temes essencials, i que podeu seguir investigant en el propi [[https://flask.palletsprojects.com/quickstart/|quickstart de Flask]]:
  
-Fem-li un cop d'ull a la [[https://flask.palletsprojects.com/testing/|documentació de test amb Flask]].+  * Persistència en base de dades 
 +  * Sessions
  
-Primera cosa que cal fer, instal·lar el mòdul de tests ''pytest'': 
-  (env) $ pip install pytest 
  
-Després, ens diuen que fem un **test skeleton**, però l'exemple que ens donen té una configuració avançada per posar punt la base de dades, utilitzant una //app factory//, etc.+També hi ha aquest cursos que poden ser interessants: 
 +  [[https://courses.miguelgrinberg.com/p/flask-mega-tutorial|mega-tutorial de Flask de Miguel Grinberg]] que té un índex prometedor. Podeu fer un cop d'ull les introduccions, la resta del curs és de pagament. 
 +  * [[https://platzi.com/cursos/flask/|Aquest curs de Flask de Plazi.com]] pinta molt béamb videotutorials en castellà.
  
-Nosaltres implementarem una versió simplificada sobre l'arxiu ''test_web.py'':+\\
  
-<file python test_web.py > 
-import pytest 
  
-from web import app+===== 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'Hello, World' in rv.data 
-</file> 
- 
-Correm els tests amb la comanda ''pytest'': 
-<code> 
-(env) $ pytest 
-============================ test session starts ============================= 
-platform linux -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 
-rootdir: /home/enric/dev21/basicflask 
-collected 1 item                                                              
- 
-test_web.py .                                                          [100%] 
- 
-============================= 1 passed in 0.09s ============================== 
-</code> 
- 
-**Com podem veure, ''pytest'' posa en marxa els tests dels arxius que comencen per ''test_'', i dins d'aquests, corre les funcions que també comencin per ''test_''.** 
- 
-==== Exercici ==== 
-<WRAP todo> 
-Examina [[https://flask.palletsprojects.com/en/2.0.x/testing/#logging-in-and-out|la secció "logging in and out" de la documentació dels tests]] i realitza el següent exercici: 
   * Crea un formulari que demani usuari i contrasenya. El formulari s'accedeix per mètode GET però envia les dades per mètode POST.   * Crea un formulari que demani usuari i contrasenya. El formulari s'accedeix per mètode GET però envia les dades per mètode POST.
   * Crea una pàgina (per POST) que respongui al formulari d'usuari i contrasenya. Crea un diccionari global amb noms d'usuari i contrasenyes vàlids (//hardcoded//).   * Crea una pàgina (per POST) que respongui al formulari d'usuari i contrasenya. Crea un diccionari global amb noms d'usuari i contrasenyes vàlids (//hardcoded//).
   * Assegura't que la pàgina de resposta al formulari respon amb un missatge que contingui un "OK" a la pàgina, i si el nom d'usuari és erroni respon adequadament amb un missatge que contingui "ERROR".   * Assegura't que la pàgina de resposta al formulari respon amb un missatge que contingui un "OK" a la pàgina, i si el nom d'usuari és erroni respon adequadament amb un missatge que contingui "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).   * **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 //hardcodejat// al codi es loguen correctament. 
-    - Que una combinació usuari/contrasenya que no ha estat introduïda no funciona i dona el missatge d'error. 
 </WRAP> </WRAP>
  
 \\ \\
  
-===== Per a saber-ne més ===== +===== Testing i + =====
-Hem fet un repàs de les funcions bàsiques del //framework// Flask. Ens queda un parell de temes per cobrir tots els temes essencials, i que podeu seguir investigant en el propi [[https://flask.palletsprojects.com/quickstart/|quickstart de Flask]]:+
  
-  * Persistència en base de dades +Aquest article continua a [[Python Web Test]] a [[Docker Flask]].
-  * Sessions +
- +
- +
-També hi ha aquest cursos que poden ser interessants: +
-  * [[https://courses.miguelgrinberg.com/p/flask-mega-tutorial|mega-tutorial de Flask de Miguel Grinberg]] que té un índex prometedor. Podeu fer un cop d'ull les introduccions, la resta del curs és de pagament. +
-  * [[https://platzi.com/cursos/flask/|Aquest curs de Flask de Plazi.com]] pinta molt bé, amb videotutorials en castellà.+
  
 \\ \\
  
python_web.1669749419.txt.gz · Darrera modificació: 2022/11/29 19:16 per enric_mieza_sanchez