bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django

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 [2024/01/09 15:05]
enric_mieza_sanchez ORM i migracions section
django [2024/04/07 23:41] (actual)
enric_mieza_sanchez [Versions]
Línia 104: Línia 104:
 Durant el desenvolupament convé planificar amb anterioritat l'esquema de la base de dades per tal que pateixi el mínim de modificacions. Cada cop que es modifica la base de dades hi ha un gran risc de que parts del codi deixin de funcionar o de que perdem dades en el canvi (migració) d'una versió de l'esquema a la següent. Malgrat tot, preveure totes les situacions es fa impossible i aplicar canvis a l'esquema de la base de dades es fa imprescindible, per molt que es vulgui minimitzar. L'ús d'eines de migració milloren aquesta gestió i permeten una transició ordenada i, sobretot, automatitzada, d'un esquema al següent. Durant el desenvolupament convé planificar amb anterioritat l'esquema de la base de dades per tal que pateixi el mínim de modificacions. Cada cop que es modifica la base de dades hi ha un gran risc de que parts del codi deixin de funcionar o de que perdem dades en el canvi (migració) d'una versió de l'esquema a la següent. Malgrat tot, preveure totes les situacions es fa impossible i aplicar canvis a l'esquema de la base de dades es fa imprescindible, per molt que es vulgui minimitzar. L'ús d'eines de migració milloren aquesta gestió i permeten una transició ordenada i, sobretot, automatitzada, d'un esquema al següent.
  
-{{migracions.png?500}}+{{:django:migracions.png?600}}
  
 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. 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.
Línia 124: Línia 124:
 Entrem a http://localhost:8000/admin/ amb l'usuari i contrasenya creats i podrem veure, crear i modificar usuaris i grups i les diferents característiques d'aquests. Entrem a http://localhost:8000/admin/ amb l'usuari i contrasenya creats i podrem veure, crear i modificar usuaris i grups i les diferents característiques d'aquests.
  
-{{django-admin-panel-1.png?400}}+{{:django:django-admin-panel-1.png?500}}
  
 \\ \\
Línia 216: 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://www.djangoproject.com/download/#supported-versions|política de versions a la web de descàrrega de Django]]: 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://www.djangoproject.com/download/#supported-versions|política de versions a la web de descàrrega de Django]]:
  
-{{django-release-roadmap.png}}+{{https://static.djangoproject.com/img/release-roadmap.4cf783b31fbe.png}}
  
-Ara utilitzarem la 3.2 (LTS) però caldrà tenir cura d'actualitzar a la següent LTS (4.2) abans de que el suport de l'actual 3.2 finalitzi, com a màxim durant el primer trimestre de 2023.+Ara utilitzarem la 4.2 (LTS) però caldrà tenir cura d'actualitzar a la següent LTS (5.2) abans de que el suport de l'actual finalitzi
  
 \\ \\
Línia 256: Línia 256:
   * Afegir ''.env'' al ''.gitignore'' per tal de no pujar per error l'arxiu de variables d'entorn a producció.   * Afegir ''.env'' al ''.gitignore'' per tal de no pujar per error l'arxiu de variables d'entorn a producció.
   * Crear un arxiu d'exemple amb les variables d'entorn necessàries per facilitar la posada en marxa, però enlloc d'anomenar-lo ''.env'', que es diugui ''.env.example''    * Crear un arxiu d'exemple amb les variables d'entorn necessàries per facilitar la posada en marxa, però enlloc d'anomenar-lo ''.env'', que es diugui ''.env.example'' 
 +</WRAP>
 +
 +<WRAP tip>
 +Per fer una llista com ''ALLOWED_HOSTS'' dins el ''.env'' podem seguir [[https://stackoverflow.com/questions/60410625/get-django-allowed-hosts-env-variable-formated-right-in-settings-py|aquest fil amb possibles solucions]]. Potser la més elegant és fer-ho com a list:
 +<file python settings.py>
 +ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
 +</file>
 +
 +<file env .env>
 +ALLOWED_HOSTS=localhost,127.0.0.1,mysite.com
 +</file>
 </WRAP> </WRAP>
  
Línia 264: 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 gcc python3-dev python3-mysqldb+  $ sudo apt install libmysqlclient-dev python3-dev python3-mysqldb gcc pkgconf
  
 I també els connectors del virtualenv de Python: I també els connectors del virtualenv de Python:
Línia 339: 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?direct}}+{{:django:diagrama_django_produccio.png?direct}}
  
 <WRAP todo> <WRAP todo>
Línia 351: Línia 362:
 Comprova que accedint al panell d'administració ''/admin'' es visualitzen els CSS correctament. Comprova que accedint al panell d'administració ''/admin'' es visualitzen els CSS correctament.
  
-Troubleshooting (possibles errades): +**Troubleshooting (possibles errades):** 
-  * Revisa la configuració de ''mysite.conf'' de Nginx. +  * Revisa que has parat (stop) i inhabilitat Apache (possible col·lisió de ports). 
-  * Revisa l'arxiu ''/etc/polls''+  * Revisa la configuració de ''mysite.conf'' de Nginx. Millor que deixis només activada el //mysite// i desactivis la //default// (links simbòlics)
 +  * Revisa els errors de Nginx amb ''sudo journalctl -xeu nginx.service'' 
 +  * 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 ''STATIC_ROOT = BASE_DIR 'static/''' al ''settings.css'' 
 +  * Comprova que has executat ''./manage.py collectstatic'' i que no dona errors. 
 +  * Si tens un ''Internal Server Error'' probablement hagis fet malament la comanda ''uwsgi'' (hauràs posat mysite.wsgi quan en realitat la teva carpeta es diu diferent de mysite).
  
 <WRAP important> <WRAP important>
Línia 360: Línia 376:
  
 </WRAP> </WRAP>
 +
 +
 +==== Engegant Django app amb Supervisor ====
  
 <WRAP todo> <WRAP todo>
django.1704812754.txt.gz · Darrera modificació: 2024/01/09 15:05 per enric_mieza_sanchez