Next revision | Previous revision |
django [2010/05/18 17:24] – created ginko | django [2010/10/12 10:54] (current) – ginko |
---|
====== Django ====== | ====== Django ====== |
Django est un framework web sur Python inspiré en partie de Ruby on Rails. Ses Leitmotiv sont: | Django est un framework web sur [[python|Python]] inspiré en partie de Ruby on Rails. Ses Leitmotiv sont: |
* Faible couplage | * Faible couplage |
* Aussi peu de code que possible | * Aussi peu de code que possible |
* Le très pythonique "L'explicite est mieux que l'implicite" | * Le très pythonique "L'explicite est mieux que l'implicite" |
Source: [[http://docs.djangoproject.com/en/dev/misc/design-philosophies/]] | Source: [[http://docs.djangoproject.com/en/dev/misc/design-philosophies/]] |
| ===== Ressources ===== |
| * [[astuces_django|Astuces]] |
| * [[http://www.django-fr.org/|django-fr]] |
| * [[http://www.djangobook.com/en/1.0/|The Django Book]] |
| ===== Django & Ajax ===== |
| * [[http://www.b-list.org/weblog/2006/jul/02/django-and-ajax/|Un article de blog intéressant sur le sujet]] |
| * [[http://www.dajaxproject.com/|Un projet d'intégration d'Ajax dans Django]] |
| ===== Advocacy ===== |
| * [[http://stackoverflow.com/questions/1293361/how-to-convince-my-boss-to-use-django]] |
===== Création d'un projet ===== | ===== Création d'un projet ===== |
Source: [[http://docs.django-fr.org/intro/tutorial01.html]] | Source: [[http://docs.django-fr.org/intro/tutorial01.html]] |
# ou: | # ou: |
python manage.py runserver 0.0.0.0:8000</code>, ilest accessible à l'adesse: [[http://127.0.0.1:8000]] | python manage.py runserver 0.0.0.0:8000</code>, ilest accessible à l'adesse: [[http://127.0.0.1:8000]] |
=== Base de données === | ==== Base de données ==== |
Editer ''settings.py'': | Editer ''settings.py'': |
* ''DATABASE_ENGINE'': 'postgresql_psycopg2', 'mysql' ou 'sqlite3'. | * ''DATABASE_ENGINE'': 'postgresql_psycopg2', 'mysql' ou 'sqlite3'. |
* ''DATABASE_PASSWORD'': obvious! | * ''DATABASE_PASSWORD'': obvious! |
* ''DATABASE_HOST'': obvious! | * ''DATABASE_HOST'': obvious! |
== SyncDB == | === SyncDB === |
SyncDB est une option de ''manage.py''; elle permet de s'assurer que la base possède une structure apte à héberger les données de toutes les applications indiquées dans les ''INSTALLED_APPS'' de settings.py''. Elle crée donc ce qu'il faut en plus si c'est nécessaire. | SyncDB est une option de ''manage.py''; elle permet de s'assurer que la base possède une structure apte à héberger les données de toutes les applications indiquées dans les ''INSTALLED_APPS'' de ''settings.py''. Elle crée donc ce qu'il faut en plus si c'est nécessaire. |
<code python>python manage.py syncdb</code> | <code python>python manage.py syncdb</code> |
| ==== Création d'une application ==== |
| Dans le répertoire ''mysite'':<code python>python manage.py startapp polls</code> |
| Cela crée un nouveau répertoire appelé ''polls'' avec dedans: |
| <code python>polls/ |
| __init__.py |
| models.py |
| views.py</code> |
| * ''models.py'' contient le modèle des données (généré par l'ORM via SyncDB). |
| * ''views.py'' contient les vues. |
| ==== Admin ==== |
| Django comporte une module d'administration pré-installé. Pour l'activer: |
| * Ajouter ''django.contrib.admin'' dans votre option ''INSTALLED_APPS''. |
| * Lancer <code python>python manage.py syncdb</code>. Puisque vous avez ajouté une nouvelle application à ''INSTALLED_APPS'', les tables de la base de données ont besoin d’être mises à jour. |
| * Editer ''urls.py'' en décommentant le pattern adéquat (commençant sans doute par ''(r'^admin'') |
| * Rendre une appli modifiable par l'admin:<code python>from mysite.polls.models import Poll |
| from django.contrib import admin |
| |
| admin.site.register(Poll)</code> dans ''admin.py'' |
| ==== Installer django sur un hébergement ==== |
| * [[http://rabaix.net/en/articles/2007/08/31/how-to-install-django-on-ovh-net|Installer Djangi sur un hébergement OVH]] |
| ===== Common Bad Programming Pattern ===== |
| ==== Importation croisée ==== |
| Lorsque l'on rencontre l'erreur suivante: |
| <code>Caught ViewDoesNotExist while rendering: Could not import reporter.reports2.mesure.views. Error was: ...</code> |
| Et que cette erreur se produit sur n'importe quelle url de l'appli, il y a des chances qu'elle provienne d'une importation croisée: un module importe une ressource provenant d'un second module qui lui-même importe une ressource du premier module. Python n'arrive pas à réaliser le second import. |
| Cette erreur est d'autant plus perfide que la stack est très obscure et provient en apparence d'un truc qui n'a rien à voir avec le problème (sauf bien sur le module que Python n'arrive pas à importer). |