Astuces Django

December 11, 2009 on 1:46 am | In Python, developpement, django, web | No Comments

tipsSuite à 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

Queysets : filters et excludes dynamiques

  • Utilisez les dictionnaires pour filtrer dynamiquement vos querysets :
filtres = {}
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>
  • Utilisez get_absolute_url() sur vos modèles pour affecter une url à chacun de vos objets

Des questions que vous vous posez surement :

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

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^