Astuces Django
December 11, 2009 on 1:46 am | In Python, developpement, django, web | No Comments
Suite à mon quickstart Django, me revoici avec quelques astuces pour continuer.
Pour tester/développer avec Django, je rappelle qu’il vaut mieux utiliser le serveur de dev intégré, puis passer à Apache, nginx ou autre pour la production par la suite.
Il est important de lire pour commencer les principes de la philosophie Django ainsi que le ‘django coding style’
Ne hardcodez pas vos paths
- dans votre settings.py :
-
BASE_DIR = os.path.dirname(__file__)
- utilisez ensuite os.path.join avec settings.BASE_DIR ailleurs si besoin
- Pour importer les settings de votre projet, utilisez toujours
from django.conf import settings
Utilisez un fichier local_settings.py
- Créez un fichier local_settings.py qui contiendra uniquement les settings relatifs au déploiment de votre application : settings de base de données, smtp, debug… Vous n’aurez plus que celui la à modifier pour un nouveau déploiement.
Mettre en production avec Apache
- Pour une installation classique avec Apache, utilisez de préférence mod_wsgi. N’utilisez pas le serveur de dev intégré en production!
Debug AJAX plus pratique
- Si vous faites de l’Ajax, utilisez Firebug et le middleware AJAXSimpleExceptionResponse
Queysets : filters et excludes dynamiques
- Utilisez les dictionnaires pour filtrer dynamiquement vos querysets :
filtres['date__gte'] = datetime.datetime.today() – datetime.timedelta(dasy=7)
filtres['titre__icontains'] = ‘python’
excludes={}
excludes['epuise'] = True
qs = model.Livres.objects.exclude(**excludes).filter(**filtres)
Créez des applications modulaires
- Placez vos app dans un sous dossier ‘apps’
- Utiliser des objets génériques : le ContentType framework
Utilisez un script pour mettre à jour vos modèles
- Django ne gérant pas nativement les ALTER sur votre base de données, vous devez sauvegarder (manage.py dumpdata), reset votre base (manage.py reset) puis recréer votre base (manage.py syncdb) et recharger les données (manage.py loaddata).
- Utilisez plutot un script qui automatisera cette tache
Utilisez des décorateurs dans vos vues
- @login_required pour restreindre la vue aux utilisateurs loggés
- @user_passes_test(lambda u: u.has_perm(’polls.can_vote’)) pour restreindre la vue selon un test particulier
- créez vos propres décorateurs
Ne définissez qu’une fois vos urls
- Utilisez les named-urls pour ne plus harcoder vos urls
- Dans urls.py :
(r’^articles/list/(\d)+’, apps.main.list, name=”list-view”)
- Dans une vue :
return HttpResponseRedirect(reverse(’list-view’, args=[2007]))
- Dans un template :
<a href=”{% url list-view 2007 %}”>ma vue</a>
- Dans urls.py :
- Utilisez get_absolute_url() sur vos modèles pour affecter une url à chacun de vos objets
Des questions que vous vous posez surement :
- La différence entre null et blank dans vos modèles
- Comment toujours passer des variables à mes templates : les template contexts
De bons examples de coding-styles :
Différents cas de figures sur les formulaires Django : http://uswaretech.com/blog/2010/01/doing-things-with-django-forms/
No Comments yet »
RSS feed for comments on this post. TrackBack URI
Leave a comment
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^