Diferència entre revisions de la pàgina «Django»
Línia 116: | Línia 116: | ||
Guia: | Guia: | ||
− | # Preparació: | + | # '''Preparació''': |
## Clarificar la funcionalitat del projecte. | ## Clarificar la funcionalitat del projecte. | ||
## Crear [[Virtualenv]] i projecte Django. | ## Crear [[Virtualenv]] i projecte Django. | ||
## Crear [[Git: comandes|repositori de GIT]] per gestionar l'equip de treball . | ## Crear [[Git: comandes|repositori de GIT]] per gestionar l'equip de treball . | ||
− | # Model i backend: | + | # '''Model i backend''': |
− | ## Clarificar els objectes i taules de la BD, en particular les FK. Les implementarem al [https://github.com/emieza/karaokelist/blob/master/karaoke/models.py models.py , com podem veure a l'exemple]: | + | ## Clarificar els objectes i taules de la BD, en particular les FK. Les implementarem al [https://github.com/emieza/karaokelist/blob/master/karaoke/models.py '''models.py''' , com podem veure a l'exemple]: |
##* Items: temes a cantar (nom del cantant, URL del vídeo, etc.) | ##* Items: temes a cantar (nom del cantant, URL del vídeo, etc.) | ||
##* Vots: (likes) vots emesos per al tema seleccionat. Es limita a un vot per IP emissora i tema (item). | ##* Vots: (likes) vots emesos per al tema seleccionat. Es limita a un vot per IP emissora i tema (item). | ||
## Crear migració del model: <pre>(env) $ python manage.py makemigrations</pre> | ## Crear migració del model: <pre>(env) $ python manage.py makemigrations</pre> | ||
## Crear DB: <pre>(env) $ python manage.py migrate</pre> | ## Crear DB: <pre>(env) $ python manage.py migrate</pre> | ||
− | ## [https://github.com/emieza/karaokelist/blob/master/karaoke/admin.py Registrar models i personalitzar interfície d'administrador a | + | ## [https://github.com/emieza/karaokelist/blob/master/karaoke/admin.py Registrar models i personalitzar interfície d'administrador a '''admin.py''']. |
## Crear superuser (admin): <pre>(env) $ python manage.py createsuperuser</pre> | ## Crear superuser (admin): <pre>(env) $ python manage.py createsuperuser</pre> | ||
## Testejar: <pre>(env) $ python manage.py runserver</pre> | ## Testejar: <pre>(env) $ python manage.py runserver</pre> | ||
− | # Frontend: | + | # '''Frontend''': |
− | ## Clarificar les rutes necessàries. [https://github.com/emieza/karaokelist/blob/master/karaokelist/urls.py | + | ## Clarificar les rutes necessàries. |
− | + | ## [https://github.com/emieza/karaokelist/blob/master/karaokelist/urls.py Implementar les rutes decidides a '''urls.py''']. | |
+ | ## Crea les views (controladors) pertinents a [https://github.com/emieza/karaokelist/blob/master/karaoke/views.py '''views.py''']. | ||
+ | ## Crea les [https://github.com/emieza/karaokelist/tree/master/karaoke/templates/karaoke plantilles pertinents a la '''carpeta ''templates''''']. | ||
+ | ## Recorda crear una [https://github.com/emieza/karaokelist/blob/master/karaoke/templates/karaoke/base.html plantilla base] i estendre les altres plantilles ([https://github.com/emieza/karaokelist/blob/master/karaoke/templates/karaoke/create_item.html per exemple aquesta de crear_item]) utilitzant les sentències <nowiki>{{block}}</nowiki> | ||
<br> | <br> |
Revisió del 11:07, 13 feb 2017
Django és un framework web basat en Python molt popular. Està orientat a la rapidesa de desenvolupament.
Django or "The web framework for perfectionists with deadlines".
Contingut
Introducció
Pàgina oficial:
https://www.djangoproject.com/
Articles relacionats:
Es basa en un paradigma MTV o Model-Template-View. És similar al arxiconegut MVC o Model-View-Controller, però la terminologia pot induir a confusions. En el cas de MVC, la view és la part visual o GUI, mentre que en el MTV, la view és el codi amb la lògica de negoci (equivaldria al controller del MVC).
ULL doncs amb els noms!
Model - View - Controller Model - Template - View
Django està molt implantat a tot el món web, disposa de gran prestigi i té un creixement ràpid de desenvolupadors i ofertes de feina relacionades.
Preparatius i instal·lació
Per desenvolupar amb Django ens serà molt útil (per no dir imprescindible) utilitzar Virtualenv.
Abans de començar, configura el teu entorn com s'explica en aquest article.
Backend
Per treballar el backend podem fer ús dels tutorials oficials de Django. Aquí tens accés a la PART 1
https://docs.djangoproject.com/en/1.10/intro/tutorial01/
Per poder dominar mínimament les possibilitats del backend segueix al menys aquestes parts del tutorial:
- Django tutorial Part 1: creació de projecte i primera view
- Django tutorial Part 2: model, BD, admin backend
- Django tutorial Part 7: customize admin i inlines
- Investiga la propietat list_editable del ModelAdmin. Per a què serveix?
A partir d'aquí podrem plantejar un projecte que implementi tot el CRUD en el backend.
- Planteja el projecte al professor. Que et doni el vist-i-plau abans de començar. El projecte hauria d'incloure usuaris i permisos diversos.
- Implementa el model amb Django.
- Mira si pots incloure inlines en alguna de les entitats del model.
- Planteja't si la interfície que tens ara mateix et serveix com a backend o si necessita alguna restricció.
- Planteja la lògica de negoci.
- Implementa restriccions del model perquè s'adapti a la lògica de negoci.
Bases de dades
Migracions
Hauràs vist que en el moment de fer "migration" Django crea la base de dades. Si canviem el nostre model (a models.py), per exemple afegint camps nous, està clar que el contingut de la BD hauria de canviar també. A aquest procés en diem migració, tot i que el context de migració està més associat a traslladar les dades d'un SGBD a un altre.
En versions anteriors de Django teniem el problema que si canviàvem el model havíem de refer tota la base de dades de nou. La eina "South" va permetre migrar les dades, i finalment s'ha integrat dins de Django.
Un cop fet un canvi en el model, caldrà executar:
$ python manage makemigrations <opcional:nom_app> $ python manage migrate
SQLite vs MySQL
Per defecte Django utilitza SQLite ja que és més senzilla de configurar i guarda les dades en un arxiu db.sqlite a l'arrel del projecte.
Per diversos motius ens pot interessar canviar el motor de la BD a un de més sofisticat, com pot ser MySQL. Alguns d'aquests motius son:
- Eficiència
- Multithreading
- Ús de tipus de dades més sofisticats com la Geolocalització
Per canviar a MySQL hem de fer les següents passes:
Instal·lar els següents paquets del sistema:
$ sudo apt-get install libmysqlclient-dev python-dev python-gdal python-mysql.connector python-mysqldb python-mysqldb
Instal·lar els següents paquets del Virtualenv:
(env) $ pip install mysql-python
Canviar el backend de BD de settings.py:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'PASSWORD': 'lalalaxxx', 'HOST': 'localhost', 'PORT': '3306', 'NAME': 'twitter', 'USER': 'projectex', } }
Frontend
Tutorials:
- https://www.tutorialspoint.com/django/index.htm
- Oficials de Django:
Documentació rellevant:
- Class-based views i generic views:
Plug-ins:
- ...
Projecte amb Django
Seguidament proposem una guia per realitzar un projecte amb Django, un cop hagis finalitzat els tutorials anteriorment esmentats.
Comentarem les diferents passes amb aquest projecte d'exemple, es tracta d'una llista de karaoke per demanar torn, penjar el vídeo i votar els temes:
https://github.com/emieza/karaokelist
Guia:
- Preparació:
- Clarificar la funcionalitat del projecte.
- Crear Virtualenv i projecte Django.
- Crear repositori de GIT per gestionar l'equip de treball .
- Model i backend:
- Clarificar els objectes i taules de la BD, en particular les FK. Les implementarem al models.py , com podem veure a l'exemple:
- Items: temes a cantar (nom del cantant, URL del vídeo, etc.)
- Vots: (likes) vots emesos per al tema seleccionat. Es limita a un vot per IP emissora i tema (item).
- Crear migració del model:
(env) $ python manage.py makemigrations
- Crear DB:
(env) $ python manage.py migrate
- Registrar models i personalitzar interfície d'administrador a admin.py.
- Crear superuser (admin):
(env) $ python manage.py createsuperuser
- Testejar:
(env) $ python manage.py runserver
- Clarificar els objectes i taules de la BD, en particular les FK. Les implementarem al models.py , com podem veure a l'exemple:
- Frontend:
- Clarificar les rutes necessàries.
- Implementar les rutes decidides a urls.py.
- Crea les views (controladors) pertinents a views.py.
- Crea les plantilles pertinents a la carpeta templates.
- Recorda crear una plantilla base i estendre les altres plantilles (per exemple aquesta de crear_item) utilitzant les sentències {{block}}
Desplegament
Desplegament:
- En servidor web mitjançant WSGI en Apache i Nginx
- En servidor d'aplicacions: Heroku, Openshift
Podeu llegir l'article Django en producció per veure diverses opcions.