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 13:46] enric_mieza_sanchez [Variables d'entorn amb django-environ] |
django [2024/04/07 23:41] (actual) enric_mieza_sanchez [Versions] |
||
---|---|---|---|
Línia 18: | Línia 18: | ||
{{tag> #FpInfor #Daw #DawMp07 # | {{tag> #FpInfor #Daw #DawMp07 # | ||
+ | |||
\\ | \\ | ||
Línia 70: | Línia 71: | ||
Visita el //admin panel// a '' | Visita el //admin panel// a '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== 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 149: | ||
* 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 171: | ||
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 161: | Línia 216: | ||
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' | + | Ara utilitzarem la 4.2 (LTS) però caldrà tenir cura d' |
\\ | \\ | ||
Línia 201: | Línia 256: | ||
* 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 275: | ||
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 245: | Línia 311: | ||
==== Servidor d' | ==== Servidor d' | ||
[[https:// | [[https:// | ||
+ | |||
+ | Assegura' | ||
+ | (env) $ sudo apt install gcc build-essential python3-dev | ||
En realitat la seva instal·lació i posta en marxa és molt senzilla: | En realitat la seva instal·lació i posta en marxa és molt senzilla: | ||
(env) $ pip install uwsgi | (env) $ pip install uwsgi | ||
(env) $ uwsgi --http :8000 --module mysite.wsgi | (env) $ uwsgi --http :8000 --module mysite.wsgi | ||
+ | |||
+ | <WRAP important> | ||
+ | Substitueix **mysite** pel nom del teu projecte (potser és **myproject**? | ||
+ | </ | ||
<WRAP important> | <WRAP important> | ||
Línia 277: | Línia 350: | ||
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 289: | Línia 362: | ||
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 | + | * 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> | ||
+ | Si no veus els arxius estàtics perquè et dona un error FORBIDDEN, revisa | ||
</ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Engegant Django app amb Supervisor ==== | ||
<WRAP todo> | <WRAP todo> |