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 | ||
|
django_lliga [2023/04/17 12:26] enric_mieza_sanchez [Exercicis] |
django_lliga [2025/05/29 10:14] (actual) enric_mieza_sanchez [Seeder per creació de dades d'exemple] |
||
|---|---|---|---|
| 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 " | - Una taula de " | ||
| + | |||
| + | {{ futbol-chilena.png? | ||
| 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 # |
| \\ | \\ | ||
| + | |||
| + | <WRAP tip> | ||
| + | Podeu veure una mostra d' | ||
| + | </ | ||
| ===== Crear projecte ===== | ===== Crear projecte ===== | ||
| Línia 35: | Línia 41: | ||
| * Partit | * Partit | ||
| - | És fàcil tenir la temptació de posar els resultats dins de l' | + | <WRAP todo> |
| + | Creeu els models esmentats: Lliga, Equip, Jugador, Partit. | ||
| + | |||
| + | Podeu mirar el // | ||
| + | </ | ||
| + | |||
| + | És fàcil tenir la temptació de posar els resultats dins de l' | ||
| + | |||
| + | ==== Millorant el model ==== | ||
| Els resultats dels partits, si volem que tingui possibilitat de fer rànkings de " | Els resultats dels partits, si volem que tingui possibilitat de fer rànkings de " | ||
| Línia 186: | Línia 200: | ||
| Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l' | Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l' | ||
| - | En particular [[https:// | + | En particular [[https:// |
| + | (env) $ pip install faker | ||
| - | Podem crear el //seeder// dins una [[https:// | + | Podem crear el //seeder// dins una [[https:// |
| - | $ ./admin.py crea_lliga "Lliga fake 2" | + | $ ./manage.py crea_lliga "Lliga fake 2" |
| L' | L' | ||
| Línia 195: | Línia 210: | ||
| --> Proposta seeder crea_lliga# | --> Proposta seeder crea_lliga# | ||
| - | <file python management/ | + | Creeu les carpetes '' |
| + | $ mkdir -p futbol/ | ||
| + | |||
| + | **On < | ||
| + | |||
| + | Afegiu-hi el següent arxiu: | ||
| + | |||
| + | <file python | ||
| from django.core.management.base import BaseCommand, | from django.core.management.base import BaseCommand, | ||
| from django.utils import timezone | from django.utils import timezone | ||
| Línia 201: | Línia 223: | ||
| from datetime import timedelta | from datetime import timedelta | ||
| from random import randint | from random import randint | ||
| + | |||
| from lliga.models import * | from lliga.models import * | ||
| + | |||
| faker = Faker([" | faker = Faker([" | ||
| + | |||
| class Command(BaseCommand): | class Command(BaseCommand): | ||
| help = 'Crea una lliga amb equips i jugadors' | help = 'Crea una lliga amb equips i jugadors' | ||
| + | |||
| def add_arguments(self, | def add_arguments(self, | ||
| parser.add_argument(' | parser.add_argument(' | ||
| + | |||
| def handle(self, | def handle(self, | ||
| titol_lliga = options[' | titol_lliga = options[' | ||
| - | lliga = Lliga.objects.filter(titol=titol_lliga) | + | lliga = Lliga.objects.filter(nom=titol_lliga) |
| if lliga.count()> | if lliga.count()> | ||
| print(" | print(" | ||
| return | return | ||
| + | |||
| print(" | print(" | ||
| - | lliga = Lliga( | + | lliga = Lliga( |
| - | inici=timezone.now(), | + | |
| - | final=timezone.now()+timedelta(days=11*30)) | + | |
| lliga.save() | lliga.save() | ||
| + | |||
| print(" | print(" | ||
| prefixos = [" | prefixos = [" | ||
| Línia 233: | Línia 253: | ||
| prefix += " " | prefix += " " | ||
| nom = prefix + ciutat | nom = prefix + ciutat | ||
| - | equip = Equip(ciutat=ciutat, | + | equip = Equip(ciutat=ciutat, |
| # | # | ||
| equip.save() | equip.save() | ||
| lliga.equips.add(equip) | lliga.equips.add(equip) | ||
| + | |||
| print(" | print(" | ||
| for j in range(25): | for j in range(25): | ||
| - | nom = faker.first_name() | + | nom = faker.name() |
| - | | + | |
| - | | + | |
| - | jugador = Jugador(nom=nom, | + | jugador = Jugador(nom=nom, |
| + | edat=edat,equip=equip) | ||
| # | # | ||
| jugador.save() | jugador.save() | ||
| - | fitxa = Fitxa(jugador=jugador, | + | |
| - | fitxa.save() | + | |
| print(" | print(" | ||
| for local in lliga.equips.all(): | for local in lliga.equips.all(): | ||
| Línia 338: | Línia 357: | ||
| </ | </ | ||
| <-- | <-- | ||
| + | |||
| + | <WRAP todo> | ||
| + | **View classificació** | ||
| + | |||
| + | Crea la view de classificació i afegeix els següents camps: | ||
| + | * Punts | ||
| + | * Victòries | ||
| + | * Empats | ||
| + | * Derrotes | ||
| + | * Gols a favor | ||
| + | * Gols en contra | ||
| + | * Gol average | ||
| + | |||
| + | Afegiu també el nom de la lliga. | ||
| + | </ | ||
| \\ | \\ | ||
| Línia 402: | Línia 436: | ||
| ===== Formularis ===== | ===== Formularis ===== | ||
| - | Referències | + | <WRAP info> |
| - | * [[https:// | + | Podeu llegir referències |
| - | * [[https:// | + | </WRAP> |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | + | ||
| - | Altres: | + | |
| - | * https:// | + | |
| - | + | ||
| - | 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 // | + | |
| - | + | ||
| - | En Django | + | |
| - | - Plantilla // | + | |
| - | - Utilitzar objecte '' | + | |
| - | - Utilitzar objectes més sofisticats com '' | + | |
| - | - Utilitzar | + | |
| - | + | ||
| - | El processament del formulari és sempre similar (menys en el cas de les //generic views//). | + | |
| ==== Menu form ==== | ==== Menu form ==== | ||
| Línia 451: | Línia 464: | ||
| if form.is_valid(): | if form.is_valid(): | ||
| lliga = form.cleaned_data.get(" | lliga = form.cleaned_data.get(" | ||
| + | # cridem a / | ||
| return redirect(' | return redirect(' | ||
| return render(request, | return render(request, | ||
| Línia 457: | Línia 471: | ||
| </ | </ | ||
| - | I la plantilla ens quedaria així de simple: | + | La plantilla |
| <file html menu.html> | <file html menu.html> | ||
| < | < | ||
| Línia 467: | Línia 481: | ||
| <input type=" | <input type=" | ||
| </ | </ | ||
| + | </ | ||
| + | |||
| + | 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(" | ||
| + | path(" | ||
| + | ] | ||
| + | </ | ||
| + | |||
| + | Finalment modifiquem '' | ||
| + | |||
| + | <file python views.py> | ||
| + | def classificacio(request, | ||
| + | lliga = get_object_or_404( Lliga, pk=lliga_id) | ||
| + | equips = lliga.equip_set.all() | ||
| + | #... | ||
| </ | </ | ||
| Línia 478: | Línia 510: | ||
| Elabora formularis per: | Elabora formularis per: | ||
| + | - Crear jugador (amb ModelForm). | ||
| - Crear lliga. | - Crear lliga. | ||
| * Assegura' | * Assegura' | ||
| Línia 542: | Línia 575: | ||
| </ | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Autenticació ===== | ||
| + | <WRAP info> | ||
| + | Per saber més de com autenticar-nos pots llegir [[Django Auth]] | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Exercicis de consultes ===== | ||
| + | |||
| + | - Lligues que contenen la paraula " | ||
| + | - Equips que comença el seu nom amb " | ||
| + | - Equips que tenen " | ||
| + | - Equips que acaben el seu nom en " | ||
| + | - Equips que tinguin judadors amb el nom XXX | ||
| + | - Jugadors que hagin marcat algun gol. | ||