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 [2023/06/29 15:29] enric_mieza_sanchez [Configurar Nginx per a servir arxius estàtics] |
django [2025/05/08 10:06] (actual) enric_mieza_sanchez [Entorn Python Venv] |
||
|---|---|---|---|
| Línia 13: | Línia 13: | ||
| Referències: | Referències: | ||
| + | * [[django_pres|Presentació de diapositives Django]] en aquesta wiki. | ||
| * Web oficial: https:// | * Web oficial: https:// | ||
| * El magnífic [[https:// | * El magnífic [[https:// | ||
| + | * [[django_lliga|Exemple app Django per gestió d'una lliga de futbol]] en aquesta wiki, molt recomanat fer-ho després d' | ||
| * Un altre bon [[https:// | * Un altre bon [[https:// | ||
| Línia 48: | Línia 50: | ||
| A l' | A l' | ||
| - | Resumidament, | + | Resumidament, |
| + | |||
| + | <tabbox Versió GNU/ | ||
| $ python3 -m venv env | $ python3 -m venv env | ||
| $ source env/ | $ source env/ | ||
| - | (env) $ pip install django | + | (env) $ pip install django==5.2 |
| + | <tabbox Versió Windows> | ||
| + | > python3 -m venv env | ||
| + | > env\Scripts\Activate.bat | ||
| + | (env) > pip install django==5.2 | ||
| + | </ | ||
| + | |||
| + | <WRAP tip> | ||
| + | Si bé el més habitual és tenir el '' | ||
| + | </ | ||
| \\ | \\ | ||
| Línia 70: | Línia 83: | ||
| Visita el //admin panel// a '' | Visita el //admin panel// a '' | ||
| + | |||
| + | Per seguir amb la creació de models, caldrà crear al menys una aplicació dins del projecte Django: | ||
| + | (env) $ ./manage.py startapp myapp | ||
| + | |||
| + | Donar d'alta la nova app afegint aquestes línies als arxius: | ||
| + | <file pyhton settings.py> | ||
| + | # ... | ||
| + | INSTALLED_APPS = [ | ||
| + | " | ||
| + | # ... | ||
| + | </ | ||
| + | |||
| + | I activar els models a l' | ||
| + | <file python admin.py> | ||
| + | from django.contrib import admin | ||
| + | from .models import * | ||
| + | |||
| + | admin.site.register(MyModel1) | ||
| + | admin.site.register(MyModel2) | ||
| + | # ... | ||
| + | </ | ||
| + | |||
| + | Cada cop que modifiquem el model de dades del projecte caldrà afegir: | ||
| + | (env) $ ./manage.py makemigrations | ||
| + | (env) $ ./manage.py migrate | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== ORM, models i migracions ===== | ||
| + | **Un // | ||
| + | |||
| + | Un **model**, en el context d'un ORM, **és una //class// que està mapejada a una taula de la base de dades**. Així, per exemple, es pot crear la següent //class// a l' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class Llibre (models.Model): | ||
| + | titol = models.CharField(max_length=100) | ||
| + | autor = models.CharField(max_length=200) | ||
| + | resum = models.TextField(null=True, | ||
| + | data_edicio = models.DateField() | ||
| + | </ | ||
| + | |||
| + | Per crear un llibre i guardar-lo a la taula, enlloc d' | ||
| + | <code python> | ||
| + | llibre = Llibre() | ||
| + | llibre.titol = "El mag del Kremlin" | ||
| + | llibre.autor = " | ||
| + | import datetime | ||
| + | llibre.data_edicio = datetime.datetime(2023, | ||
| + | # per persistir l' | ||
| + | llibre.save() | ||
| + | </ | ||
| + | |||
| + | En el context dels // | ||
| + | |||
| + | Durant el desenvolupament convé planificar amb anterioritat l' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | El mecanisme és simple: cal un arxiu de migració que realitzi els canvis a la BD a cada evolució. Cada migració pot implicar un canvi simple com afegir o esborrar una columna fins a grans canvis com afegir multitud de taules i relacions. | ||
| + | |||
| + | Tenim dos exemples complementaris i paradigmàtics en la gestió de les migracions: els dels // | ||
| + | * En **Laravel** el desenvolupador ha d' | ||
| + | * En **Django** el desenvolupador modifica directament el model amb l'ORM. Amb la instrucció '' | ||
| + | |||
| + | En el projecte que estavem desenvolupant, | ||
| + | (env1) $ ./manage.py makemigrations | ||
| + | (env1) $ ./manage.py migrate | ||
| + | |||
| + | Veurem que ara **apareix un arxiu '' | ||
| + | |||
| + | Per visualitzar les taules podem crear un superusuari i entrar a l'// | ||
| + | (env1) $ ./manage.py createsuperuser | ||
| + | (env1) $ ./manage.py runserver | ||
| + | |||
| + | Entrem a http:// | ||
| + | |||
| + | {{: | ||
| \\ | \\ | ||
| Línia 94: | Línia 186: | ||
| * Les carpetes de [[virtualenv]]. El '' | * Les carpetes de [[virtualenv]]. El '' | ||
| - | Una versió mínima dels arxius i carpetes que NO volem que es puguin | + | Una versió mínima dels arxius i carpetes que NO volem que es pugin al repo seria aquest: |
| <file .gitignore .gitignore> | <file .gitignore .gitignore> | ||
| Línia 116: | Línia 208: | ||
| Aquí hauries de enllaçar el teu repositori local amb el remot (per ex. de Github): | Aquí hauries de enllaçar el teu repositori local amb el remot (per ex. de Github): | ||
| - | (env) $ git remote add ... | + | (env) $ git remote add origin https:// |
| - | (env) $ git push | + | (env) $ git push -u origin main |
| \\ | \\ | ||
| Línia 155: | Línia 247: | ||
| En algun cas es poden trobar problemes per fer funcionar un projecte, si el sistema operatiu és diferent. En aquests casos potser és millor simplificar el '' | En algun cas es poden trobar problemes per fer funcionar un projecte, si el sistema operatiu és diferent. En aquests casos potser és millor simplificar el '' | ||
| - | django==3.2 | + | django==4.2 |
| django-environ | django-environ | ||
| mysqlclient | mysqlclient | ||
| Línia 161: | Línia 253: | ||
| Hem de tenir en compte el cicle de vida de les versions de Django que fem servir. Les versions LTS són les //Long Term Service// que ens donaran cobertura durant més temps. Podem veure la [[https:// | Hem de tenir en compte el cicle de vida de les versions de Django que fem servir. Les versions LTS són les //Long Term Service// que ens donaran cobertura durant més temps. Podem veure la [[https:// | ||
| - | {{django-release-roadmap.png}} | + | {{https:// |
| - | Ara utilitzarem la 3.2 (LTS) però caldrà tenir cura d' | + | A data de juny de 2024 utilitzarem la 4.2 (LTS) però caldrà tenir cura d' |
| \\ | \\ | ||
| Línia 201: | Línia 293: | ||
| * Afegir '' | * Afegir '' | ||
| * Crear un arxiu d' | * Crear un arxiu d' | ||
| + | </ | ||
| + | |||
| + | <WRAP tip> | ||
| + | Per fer una llista com '' | ||
| + | <file python settings.py> | ||
| + | ALLOWED_HOSTS = env.list(' | ||
| + | </ | ||
| + | |||
| + | <file env .env> | ||
| + | ALLOWED_HOSTS=localhost, | ||
| + | </ | ||
| </ | </ | ||
| Línia 209: | Línia 312: | ||
| Per utilitzar MySQL caldrà instal·lar els binaris necessaris al sistema operatiu. Per a Ubuntu: | Per utilitzar MySQL caldrà instal·lar els binaris necessaris al sistema operatiu. Per a Ubuntu: | ||
| - | $ sudo apt install libmysqlclient-dev | + | $ sudo apt install libmysqlclient-dev python3-dev python3-mysqldb |
| I també els connectors del virtualenv de Python: | I també els connectors del virtualenv de Python: | ||
| Línia 284: | Línia 387: | ||
| Django no ha de servir mai arxius estàtics, ja que és menys eficient que el Web Server, que està pensat per a això específicament. El següent diagrama mostra com es durà a terme la posada en producció final: | Django no ha de servir mai arxius estàtics, ja que és menys eficient que el Web Server, que està pensat per a això específicament. El següent diagrama mostra com es durà a terme la posada en producció final: | ||
| - | {{diagrama_django_produccio.png? | + | {{:django:diagrama_django_produccio.png? |
| <WRAP todo> | <WRAP todo> | ||
| Línia 296: | Línia 399: | ||
| Comprova que accedint al panell d' | Comprova que accedint al panell d' | ||
| - | Troubleshooting (possibles errades): | + | **Troubleshooting (possibles errades):** |
| - | * Revisa la configuració de '' | + | * Revisa que has parat (stop) i inhabilitat Apache (possible col·lisió de ports). |
| - | * Revisa | + | * Revisa la configuració de '' |
| + | * Revisa | ||
| + | * Si no veus el CSS fes CTRL+u , mira el codi font i clica un arxiu CSS aviam quin error et dona. | ||
| + | * Comprova que has afegit | ||
| + | * Comprova que has executat '' | ||
| + | * Si tens un '' | ||
| <WRAP important> | <WRAP important> | ||
| Línia 305: | Línia 413: | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ==== Engegant Django app amb Supervisor ==== | ||
| <WRAP todo> | <WRAP todo> | ||