bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django_lliga

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
django_lliga [2023/04/16 22:36]
enric_mieza_sanchez [Exercicis]
django_lliga [2024/03/14 18:15] (actual)
enric_mieza_sanchez [Menu form]
Línia 13: Línia 13:
   - Una taula de classificació per cada lliga, que compti els punts dels partits celebrats, gols a favor i en contra de cada equip.   - Una taula de classificació per cada lliga, que compti els punts dels partits celebrats, gols a favor i en contra de cada equip.
   - Una taula de "pichichis" amb el rànking de golejadors de cada lliga.   - Una taula de "pichichis" amb el rànking de golejadors de cada lliga.
 +
 +{{ futbol-chilena.png?300 }}
  
 Referències: Referències:
Línia 19: Línia 21:
   * [[Django Frontend]] ídem.   * [[Django Frontend]] ídem.
  
-{{tag> #Daw #DawMp07 #DawMp07Uf2 django framework web }}+{{tag> #Daw #DawMp07 #DawMp07Uf2 #DawMp07Uf02 django framework web }}
  
 \\ \\
 +
 +<WRAP tip>
 +Podeu veure una mostra d'aquest projecte en producció a https://lliga.up.railway.app/
 +</WRAP>
  
 ===== Crear projecte ===== ===== Crear projecte =====
Línia 188: Línia 194:
 En particular [[https://faker.readthedocs.io/en/master/|per Python disposem de la llibreria Faker]] que ens facilitarà molt aquesta tasca. En particular [[https://faker.readthedocs.io/en/master/|per Python disposem de la llibreria Faker]] que ens facilitarà molt aquesta tasca.
  
-Podem crear el //seeder// dins una [[https://docs.djangoproject.com/en/stable/howto/custom-management-commands/|comanda personalitzada de Django]] que podrem cridar amb el ''admin.py'' tipus: +Podem crear el //seeder// dins una [[https://docs.djangoproject.com/en/stable/howto/custom-management-commands/|comanda personalitzada de Django]] que podrem cridar amb el ''manage.py'' tipus: 
-  $ ./admin.py crea_lliga "Lliga fake 2"+  $ ./manage.py crea_lliga "Lliga fake 2"
  
 L'argument "Lliga fake 2" serà el nom de la lliga que cal crear. La resta de dades les inventarem amb l'ajuda de Faker. L'argument "Lliga fake 2" serà el nom de la lliga que cal crear. La resta de dades les inventarem amb l'ajuda de Faker.
Línia 402: Línia 408:
 ===== Formularis ===== ===== Formularis =====
  
-Referències sobre formularis+<WRAP info> 
-  * [[https://docs.djangoproject.com/en/stable/topics/forms/|Forms]] +Podeu llegir referències sobre els potents formularis de Django a [[django_frontend#formularis|Django Formularis]]. 
-  * [[https://docs.djangoproject.com/en/stable/topics/forms/modelforms/|ModelForms]] +</WRAP>
-  * [[https://docs.djangoproject.com/en/stable/ref/models/fields/|Fields]] : camps del Form +
-  * [[https://docs.djangoproject.com/en/stable/ref/forms/fields/#fields-which-handle-relationships|Camps amb FKs]] +
-  * [[https://docs.djangoproject.com/en/stable/topics/class-based-views/generic-display/|Generic Views]]: per operacions tipus CRUD genèriques es poden crear formularis molt ràpidament, ja que ens genera tant el codi de la //view// com el //template//+
- +
-Altres: +
-  * https://docs.djangoproject.com/en/stable/topics/http/shortcuts/ +
- +
-Un formulari sempre implica diverses passes: +
-  - Crear el formulari (pot ser senzill o més complex, i necessitarà codi). +
-  - Processar les dades del formulari. +
-  - Mostrar un resultat: pot ser senzill (operació OK), o complex (mostrar classificació). Sovint és molt pràctic fer una redirecció cap a una altre //view// i repartir la complexitat en diverses parts del codi. +
- +
-Cada pas abans descrit pot necessitar el seu **template** i la seva **view**. A la //view// crearem i filtrarem les dades adequades per passar-les al //template//+
- +
-En Django tenim, al menys, 4 aproximacions per realitzar formularis: +
-  - Plantilla //hardcoded// (HTML): dona més feina però és fàcil de modificar amb coneixements bàsics de HTML. +
-  - Utilitzar objecte ''Form'' de Django. Això ens facilita la renderització i el manteniment. +
-  - Utilitzar objectes més sofisticats com ''ModelForm'' que a partir d'un model ens generarà automàticament el formulari. +
-  - Utilitzar [[https://docs.djangoproject.com/en/stable/topics/class-based-views/generic-display/|generic views com DetailView]] : les operacions tipus CRUD es poden fer amb aquests objectes genèrics+
- +
-El processament del formulari és sempre similar (menys en el cas de les //generic views//).+
  
 ==== Menu form ==== ==== Menu form ====
Línia 451: Línia 436:
         if form.is_valid():         if form.is_valid():
             lliga = form.cleaned_data.get("lliga")             lliga = form.cleaned_data.get("lliga")
 +            # cridem a /classificacio/<lliga_id>
             return redirect('classificacio',lliga.id)             return redirect('classificacio',lliga.id)
     return render(request, "menu.html",{     return render(request, "menu.html",{
Línia 457: Línia 443:
 </file> </file>
  
-I la plantilla ens quedaria així de simple:+La plantilla o //template// ens quedaria així de simple:
 <file html menu.html> <file html menu.html>
 <h1>Menu Lligues</h1> <h1>Menu Lligues</h1>
Línia 467: Línia 453:
  <input type="submit" name="submit">  <input type="submit" name="submit">
 </form> </form>
 +</file>
 +
 +També necessitarem modificar les URLs per poder accedir adequadament a la classificació i passar-li el ID de la lliga que volem visualitzar:
 +
 +<file python urls.py>
 +urlpatterns = [
 +    path("menu", views.menu, name="menu"),
 +    path("classificacio/<int:lliga_id>", views.classificacio, name="classificacio"),
 +]
 +</file>
 +
 +Finalment modifiquem ''views.py'' per tal que rebem el paràmetre ''lliga_id'' i filtrem la lliga que volem mostrar:
 +
 +<file python views.py>
 +def classificacio(request, lliga_id):
 +    lliga = get_object_or_404( Lliga, pk=lliga_id)
 +    equips = lliga.equip_set.all()
 +    #...
 </file> </file>
  
Línia 514: Línia 518:
  
 ==== Exercicis ==== ==== Exercicis ====
 +
 +{{ django:edita_partit_advanced.png?450 }}
  
 <WRAP todo> <WRAP todo>
Línia 541: Línia 547:
 </WRAP> </WRAP>
  
 +\\
 +
 +===== Autenticació =====
 +<WRAP info>
 +Per saber més de com autenticar-nos pots llegir [[Django Auth]]
 +</WRAP>
 +
 +\\
  
django_lliga.1681684615.txt.gz · Darrera modificació: 2023/04/16 22:36 per enric_mieza_sanchez