SlideShare a Scribd company logo
1 of 48
Download to read offline
Django Hacking : Comment dresser les
             serpents guitaristes

                  Yohann G ABORY — Bruno D UPUIS
                           Pilot Systems


                                   11 juillet 2011




Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Plan


  1    Introduction

  2    Les Settings

  3    L’Admin

  4    Les Templates

  5    Les autres éléments à ne pas oublier

  6    Conclusion



       Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Introduction




                             Introduction




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Django : framework Web basé sur python




  Description
      Il reprend le principe du MVC
      Il implémente WSGI
      Il est disponible sous licence BSD




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Historique


  Histoire et origine
      Son nom est un hommage au célèbre guitariste de jazz
      manouche Django Reinhart
      Il est issu du monde du journalisme
      Développé depuis 2003 par Adrian Holovaty et Simon
      Willison
      Un approche tres pythonique et peu intrusive
      Il ne se met pas en travers du chemin du développeur
      On peut se servir du dynamisme et de la puissance de
      Python



    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les Settings




                            Les Settings




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Que sont les settings ?




  Un ensemble de variables globales qui donnent des
  informations sur :
       La base de donnée
      L’adresse du site
      Le cache
      Etc...




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Settings : La problématique

  Django utilise des chemins absolus pour la localisation des
  medias, des templates etc...
      Problème : Ce n’est pas DRY
      Problème : Ça complique de beaucoup les changements
      d’environnement
              Entre les différentes instances des développeurs
              Entre l’instance de développement et la production
              Chaque instance partage des informations communes qu’il
              faut dupliquer
      Ce mode de configuration « en dur » est parfois trop rigide.
      On aimerait pouvoir modifier ces configurations durant
      l’exécution et de manière persistente


    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Settings : Hacking




      Changer les chemins relatifs en chemins absolus
      Plusieurs fichiers de settings par instance
      Cas concrets chez Pilot Systems




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Changer les chemins relatifs en chemins absolus




  Le code magique
  import os
  project_path = os.path.dirname(os.path.abspath(__file__))




     Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Plusieurs fichiers settings par instance




  Exemples
     prod_settings
      devel_settings
      local_settings




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Plusieurs fichiers settings par instance : exemple



  settings.py
  # *** settings.py ***
  # <settings goes here>
  from local_settings import *



  local_settings.py
  # *** local_settings.py ***
  # <en production>
  from prod_settings import *
  # <en developpement>
  from devel_settings import *




     Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Jouer avec votre vcs



  .hgignore à la rescousse
  On gère via Gestionnaire de Version :
      prod_settings
      devel_settings
      settings
  Seul local_settings est en dehors du gestionnaire de
  version.




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
SQLConfig


 Problématique
     La configuration est en dur dans les settings.py
     Il y a des cas ou on souhaiterait pouvoir les modifier
     simplement

 Solution
     Configuration en base de données
     Intégrer la solution dans Django
     Faire en sorte que ce soit le plus transparent possible
     Nous allons tirer parti de la souplesse de python



   Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Show me the code


  SQLConfig
  class Config(models.Model):
    key = models.CharField(max_length=200, unique=True)
    datatype = models.CharField(max_length=200)
    value = models.CharField(max_length=200)

    def get_python_value(self):
      if self.datatype == "int":
        return int(self.value)
      elif self.datatype == "bool":
        return self.value in ("1", "t", "T")
      else:
        return self.value



    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Show me the code (once again)


  SQLConfig
  class SettingsProxy(object):
    def __init__(self, target):
      self.target = target

   def __getattr__(self, key):
     if key in self.target.ALLOWED_SQL_OVERRIDES:
       try:
         option = Config.objects.get(key__exact = key)
         return option.get_python_value()
       except:
         pass
     return getattr(self.target, key)

  proxy = SettingsProxy(settings)
  for d in gc.get_referrers(settings):
    if isinstance(d, dict) and "settings" in d:
      d["settings"] = proxy




     Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
L’Admin




                                    L’Admin




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
L’interface d’administration Django




  Ce que nous allons voir
      Qu’est ce que l’admin ?
      La problèmatique
      Hacking




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : qu’est ce que c’est ?



  Des points forts évidents
      Une application permettant de manipuler les données de
      l’application
      Très configurable
      Auto-documentée
      Paramétrable via un fichier python par application
      (admin.py)




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : La Problématique




  Il existe néanmoins des soucis bloquant
      L’admin.py ne fait pas tout
      Le code des templates est complexe
      Tous les hooks n’existent pas (par exemple modifier les
      change_list_result.html)




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : Hacking



  Le plan d’attaque
      Comment surclasser les templates d’administration
      Ruser pour surclasser les templates qui, à l’origine ne
      peuvent pas l’être (exemple : admin_list)
      Les SortedUnicode
      Comment créer de nouvelles colonnes (property)




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : Surclassage des templates


  Fonctionnement standard
  Copier depuis le dossier des templates d’admin django le
  template qui nous intéresse dans :
  <votre dossier de template>/admin/application/<le modèle à surclasser>/<le template d’admin>



  Par exemple
  Par exemple pour le modèle categorie de l’application blog,
  pour changer le template du formulaire d’édition du template,
  vous faites :
      cp .../django/contrib/admin/templates/admin/change_form.html 
         mon_projet/templates/admin/app/model/admin/change_form.html




      Yohann G ABORY — Bruno D UPUIS Pilot Systems      Django Hacking : Comment dresser les serpents guitaristes
Admin : Surclassage des templates II



  Parfois, ça ne suffit pas
  Dans change_list.html on ne peut pas changer
  change_list_result :
  {% block result_list %}
    {% if action_form and actions_on_top and cl.full_result_count %}
      {% admin_actions %}
    {% endif %}
    {% result_list cl %}
    {% if action_form and actions_on_bottom and cl.full_result_count %}
      {% admin_actions %}
    {% endif %}
  {% endblock %}




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Impossible n’est pas python



  La solution
  Créer un templatetags result_list qui va écraser le
  templatetag originel :
  def result_list(cl):
      """
      Displays the headers and data list together
      """
      return {’cl’: cl,
              ’result_hidden_fields’: list(result_hidden_fields(cl)),
              ’result_headers’: list(result_headers(cl)),
              ’results’: list(results(cl))}
  template = "admin/options/change_list_results_custom.html"
  result_list = register.inclusion_tag(template)(result_list)




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Impossible n’est pas python : la suite



  Dans les templates...
      Copiez le change_list.html de django dans votre
      projet
      Copiez le change_list_results.html de django dans
      votre projet
      Renommez le change_list_results_custom.html
      Hackez !




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : Sorted Unicode


  La problématique
  Dans l’interface d’admin, les models sont auto classés par
  ordre alphabétique

  Les singes à trois bras
  âme sensible s’abstenir
      une class SortedUnicode comme unicode avec un ordre
      de tri que l’on peut spécifier
      monkey-patcher la fonction capfirst pour qu’elle
      conserver l’ordre de tri défini dans SortedUnicode



    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Admin : Créer de nouvelles colonnes

  Dans l’admin on ne veut pas toujours afficher des champs de
  models...
  Les property à la rescousse : dans models.py
  @property
  def tag_names(self):
      """
      Return the tag names, as a list
      """
      return [ t[’name’] for t in 
               tagging.models.Tag.objects.get_for_object(self).values(’name’) ]

  def tags_admin(self):
      tags = ’’
      for tag in self.tag_names:
          tags = tags+tag+’, ’
      return tags



  et dans admin.py
       list_display = (’tags_admin’)


     Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Custom Widgets




  La problématique
  Dans l’interface d’admin, on peut vouloir utiliser des contrôles
  plus intelligents




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Custom Widgets


  Hookir le rendu de l’admin
  class MyModelAdmin(ContentAdmin):
    model = MyModel

   def formfield_for_dbfield(self, db_field, **kwargs):
     if db_field.name == ’my_field’:
       truc = do_something()
       class MyCustomWidget(forms.TextInput):
         class Media:
           js = ("js/myCustomWidget.js",)

          def __init__(self,*args,**kw):
            super(PictureChooserWidget,self).__init__(*args,**kw)
            self.truc = truc

          def render(self, name, value, attrs=None):
            rendered ="""<input name="my_field" value="" class="vTextField"
                    maxlength="40" type="text" id="id_my_field">%s"""%self.truc
            return mark_safe(rendered)
        kwargs[’widget’] = MyCustomWidget
      return super(MyModelAdmin,self).formfield_for_dbfield(db_field,**kwargs)




     Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les Templates




                        Les Templates




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Tour d’horizon des templates




  Plan d’action
      Que sont les templates ?
      La problèmatique
      Templates : Hacking




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Templates : définition




  Définition
     Le T de MVC...
      Le modele de compilation d’un ensemble d’objet : le
      contexte
      Le HTML qui va accueillir les objets python




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Templates : la problématique




  Les soucis posés
      Les templatetags et les filter sont parfois trop pauvre
      Les Templates est ce vraiment DRY ?
      Le Javascript, c’est pas DRY




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Templates : Hacking




  Le DRY jusque dans les templates
      Les templatetags custom
      Les héritages de templates, les inclusions de templates
      Un python dans le café




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
les templatestags custom



  Filter
  @register.filter(name=’twitterparse’)
  @stringfilter
  def twitterparse(value):
      p = ttp.Parser()
      result = p.parse(value)
      return mark_safe(result.html)




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
les templatestags custom



  Tags
  @register.inclusion_tag(’blocks/explain.html’)
  def get_explanation(name):
    try:
       explain=Explanation.objects.get(name=name)
    except ObjectDoesNotExist:
       explain = None
    return {"explanation":explain}




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Heritage et inclusion de template


                                             base.html




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Un serpent dans le café



  Rendre javascript python-aware, un exemple avec float
      var time_data_set = {
            all :
                  {label:"all",
                  data:{{graph_all}},
                  points: { show: true },
                  lines:{ show: true},
                  color:0
                  },




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Un serpent dans le café II

  Rendre javascript python-aware un peu plus loin
  {% if hashtags %}
    var r = Raphael("holder",470,255);
    var r_10 = Raphael("hashtags_holder",470,255)
    var legends = new Array()
    var legends_10 = new Array()
    var hrefs = new Array()
    var all = new Array()
    var serie = new Array()
    {% for hashtag in hashtags %}
        {% ifchanged hashtag.name %}
            all.push(["{{hashtag.name}}",
                     {{hashtag.times}}])
        {% endifchanged %}
    {% endfor %}
  {% endif %}

    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les autres éléments à ne pas oublier




    Les autres éléments à ne
           pas oublier



    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Middleware et Managements


  Les MiddleWare
      proccess_request
      proccess_view
      process_exception
      proccess_response

  Les Managements
      Comment ça marche ?
      Les managements custom
      Les Managements dans le vues (où ailleurs... d’ailleurs)



    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les Middlewares

  process_request
  def process_request(self, request):
    """
    Here I can do whatever I want against the request
    """
    print request

  process_view
  def process_view(self,request,view_func,
                   view_args,view_kwarg):
    """
    Process the view to get info on the context
    """
    print view_func,view_args,view_kwarg
    return None #if I return something here it stops !

    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les Middlewares, suite


  process_exception
  def process_exception(self,request,exception):
    print type(exception)
    print exception.args
    return None

  process_response
  def process_response(self,request,response):
    print connection.queries
    return response




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Les Managements

  Comment ça marche ?
     python manage.py runserver
     python manage.py syncdb
     ...

  Les managements custom ?
  def handle(self,user,requested_user=None,**options):
    user = DjangoUser.objects.get(username=user)
    fetch_tweets(user,requested_user=requested_user)

  Lancer un management en python
  from django.core.management import call_command
  call_command(’fetch’, user,user_type)

   Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Conclusion




                              Conclusion




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Conclusion




  Simplifier la vie des développeurs...
      ...par la souplesse de Python
      ...par la discretion de Django
      ... et pour ne garder que le plaisir !




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
Remerciements
  Remerciements
     aux communautés Python et Django




    Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes
La page de pub
    Pilot Systems, société de services en logiciels libres :
    http://www.pilotsystems.net
    Slides en licence CC-By-Sa
    http://contributions.pilotsystems.net/

                                   Des questions ?




  Yohann G ABORY — Bruno D UPUIS Pilot Systems   Django Hacking : Comment dresser les serpents guitaristes

More Related Content

Similar to Django Hacking : Comment dresser les serpents guitaristes

Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! frameworkBenoît Simard
 
Profiling Ansible et présentation lib mitogen
Profiling Ansible et présentation lib mitogenProfiling Ansible et présentation lib mitogen
Profiling Ansible et présentation lib mitogenYannig Perre
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurDavid Paccoud
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosSaid Benaissa
 
PAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsPAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsJacques GIRAUDEL
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Normandie Web Xperts
 
Cours 1-navigateurs
Cours 1-navigateursCours 1-navigateurs
Cours 1-navigateursmigau1
 
Installation Et Configuration De Monkey Spider
Installation Et Configuration De Monkey SpiderInstallation Et Configuration De Monkey Spider
Installation Et Configuration De Monkey SpiderMohamed Ben Bouzid
 
Sécurité Web - Les bonnes pratiques pour Joomla
Sécurité Web - Les bonnes pratiques pour JoomlaSécurité Web - Les bonnes pratiques pour Joomla
Sécurité Web - Les bonnes pratiques pour JoomlaAtelier51
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Paris, France
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshopThomas Roccia
 

Similar to Django Hacking : Comment dresser les serpents guitaristes (20)

Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
 
Profiling Ansible et présentation lib mitogen
Profiling Ansible et présentation lib mitogenProfiling Ansible et présentation lib mitogen
Profiling Ansible et présentation lib mitogen
 
Comment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleurComment traduire ses bases de données sans douleur
Comment traduire ses bases de données sans douleur
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
 
PAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsPAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio Rappels
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Cours 1-navigateurs
Cours 1-navigateursCours 1-navigateurs
Cours 1-navigateurs
 
photos.ppt
photos.pptphotos.ppt
photos.ppt
 
Installation Et Configuration De Monkey Spider
Installation Et Configuration De Monkey SpiderInstallation Et Configuration De Monkey Spider
Installation Et Configuration De Monkey Spider
 
Sécurité Web - Les bonnes pratiques pour Joomla
Sécurité Web - Les bonnes pratiques pour JoomlaSécurité Web - Les bonnes pratiques pour Joomla
Sécurité Web - Les bonnes pratiques pour Joomla
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Nagios twil
Nagios twilNagios twil
Nagios twil
 
Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshop
 
Git
GitGit
Git
 

More from Paris, France

Transformation digitale
Transformation digitaleTransformation digitale
Transformation digitaleParis, France
 
Neopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeNeopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeParis, France
 
API Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webAPI Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webParis, France
 
Indexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationIndexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationParis, France
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Paris, France
 
Plone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxPlone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxParis, France
 
Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Paris, France
 
Cockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingCockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingParis, France
 
Plone, du site web à la gestion documentaire
Plone, du site web à la gestion documentairePlone, du site web à la gestion documentaire
Plone, du site web à la gestion documentaireParis, France
 
Les critères de choix d'un intranet
Les critères de choix d'un intranetLes critères de choix d'un intranet
Les critères de choix d'un intranetParis, France
 
Virtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceVirtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceParis, France
 
Partenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsPartenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsParis, France
 
Open World Forum 2009 Synthesis
Open World Forum 2009 SynthesisOpen World Forum 2009 Synthesis
Open World Forum 2009 SynthesisParis, France
 
Open World Forum 2009 Presentation
Open World Forum 2009 PresentationOpen World Forum 2009 Presentation
Open World Forum 2009 PresentationParis, France
 
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Paris, France
 
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderDeploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderParis, France
 
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Paris, France
 
Construire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneConstruire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneParis, France
 
La virtualisation dans le Datacenter
La virtualisation dans le DatacenterLa virtualisation dans le Datacenter
La virtualisation dans le DatacenterParis, France
 
Guide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsGuide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsParis, France
 

More from Paris, France (20)

Transformation digitale
Transformation digitaleTransformation digitale
Transformation digitale
 
Neopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeNeopod: une base de données objet distribuée
Neopod: une base de données objet distribuée
 
API Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webAPI Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications web
 
Indexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationIndexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour Liberation
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
 
Plone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxPlone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope Rpx
 
Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...
 
Cockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingCockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailing
 
Plone, du site web à la gestion documentaire
Plone, du site web à la gestion documentairePlone, du site web à la gestion documentaire
Plone, du site web à la gestion documentaire
 
Les critères de choix d'un intranet
Les critères de choix d'un intranetLes critères de choix d'un intranet
Les critères de choix d'un intranet
 
Virtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceVirtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open Source
 
Partenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsPartenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot Systems
 
Open World Forum 2009 Synthesis
Open World Forum 2009 SynthesisOpen World Forum 2009 Synthesis
Open World Forum 2009 Synthesis
 
Open World Forum 2009 Presentation
Open World Forum 2009 PresentationOpen World Forum 2009 Presentation
Open World Forum 2009 Presentation
 
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
 
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderDeploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
 
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
 
Construire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneConstruire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour Plone
 
La virtualisation dans le Datacenter
La virtualisation dans le DatacenterLa virtualisation dans le Datacenter
La virtualisation dans le Datacenter
 
Guide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsGuide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrations
 

Recently uploaded

Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapMaxime Huran 🌈
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleErol GIRAUDY
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311Erol GIRAUDY
 
The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)IES VE
 
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Infopole1
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensErol GIRAUDY
 

Recently uploaded (6)

Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence Artificielle
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311
 
The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)
 
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examens
 

Django Hacking : Comment dresser les serpents guitaristes

  • 1. Django Hacking : Comment dresser les serpents guitaristes Yohann G ABORY — Bruno D UPUIS Pilot Systems 11 juillet 2011 Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 2. Plan 1 Introduction 2 Les Settings 3 L’Admin 4 Les Templates 5 Les autres éléments à ne pas oublier 6 Conclusion Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 3. Introduction Introduction Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 4. Django : framework Web basé sur python Description Il reprend le principe du MVC Il implémente WSGI Il est disponible sous licence BSD Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 5. Historique Histoire et origine Son nom est un hommage au célèbre guitariste de jazz manouche Django Reinhart Il est issu du monde du journalisme Développé depuis 2003 par Adrian Holovaty et Simon Willison Un approche tres pythonique et peu intrusive Il ne se met pas en travers du chemin du développeur On peut se servir du dynamisme et de la puissance de Python Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 6. Les Settings Les Settings Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 7. Que sont les settings ? Un ensemble de variables globales qui donnent des informations sur : La base de donnée L’adresse du site Le cache Etc... Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 8. Settings : La problématique Django utilise des chemins absolus pour la localisation des medias, des templates etc... Problème : Ce n’est pas DRY Problème : Ça complique de beaucoup les changements d’environnement Entre les différentes instances des développeurs Entre l’instance de développement et la production Chaque instance partage des informations communes qu’il faut dupliquer Ce mode de configuration « en dur » est parfois trop rigide. On aimerait pouvoir modifier ces configurations durant l’exécution et de manière persistente Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 9. Settings : Hacking Changer les chemins relatifs en chemins absolus Plusieurs fichiers de settings par instance Cas concrets chez Pilot Systems Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 10. Changer les chemins relatifs en chemins absolus Le code magique import os project_path = os.path.dirname(os.path.abspath(__file__)) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 11. Plusieurs fichiers settings par instance Exemples prod_settings devel_settings local_settings Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 12. Plusieurs fichiers settings par instance : exemple settings.py # *** settings.py *** # <settings goes here> from local_settings import * local_settings.py # *** local_settings.py *** # <en production> from prod_settings import * # <en developpement> from devel_settings import * Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 13. Jouer avec votre vcs .hgignore à la rescousse On gère via Gestionnaire de Version : prod_settings devel_settings settings Seul local_settings est en dehors du gestionnaire de version. Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 14. SQLConfig Problématique La configuration est en dur dans les settings.py Il y a des cas ou on souhaiterait pouvoir les modifier simplement Solution Configuration en base de données Intégrer la solution dans Django Faire en sorte que ce soit le plus transparent possible Nous allons tirer parti de la souplesse de python Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 15. Show me the code SQLConfig class Config(models.Model): key = models.CharField(max_length=200, unique=True) datatype = models.CharField(max_length=200) value = models.CharField(max_length=200) def get_python_value(self): if self.datatype == "int": return int(self.value) elif self.datatype == "bool": return self.value in ("1", "t", "T") else: return self.value Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 16. Show me the code (once again) SQLConfig class SettingsProxy(object): def __init__(self, target): self.target = target def __getattr__(self, key): if key in self.target.ALLOWED_SQL_OVERRIDES: try: option = Config.objects.get(key__exact = key) return option.get_python_value() except: pass return getattr(self.target, key) proxy = SettingsProxy(settings) for d in gc.get_referrers(settings): if isinstance(d, dict) and "settings" in d: d["settings"] = proxy Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 17. L’Admin L’Admin Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 18. L’interface d’administration Django Ce que nous allons voir Qu’est ce que l’admin ? La problèmatique Hacking Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 19. Admin : qu’est ce que c’est ? Des points forts évidents Une application permettant de manipuler les données de l’application Très configurable Auto-documentée Paramétrable via un fichier python par application (admin.py) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 20. Admin : La Problématique Il existe néanmoins des soucis bloquant L’admin.py ne fait pas tout Le code des templates est complexe Tous les hooks n’existent pas (par exemple modifier les change_list_result.html) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 21. Admin : Hacking Le plan d’attaque Comment surclasser les templates d’administration Ruser pour surclasser les templates qui, à l’origine ne peuvent pas l’être (exemple : admin_list) Les SortedUnicode Comment créer de nouvelles colonnes (property) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 22. Admin : Surclassage des templates Fonctionnement standard Copier depuis le dossier des templates d’admin django le template qui nous intéresse dans : <votre dossier de template>/admin/application/<le modèle à surclasser>/<le template d’admin> Par exemple Par exemple pour le modèle categorie de l’application blog, pour changer le template du formulaire d’édition du template, vous faites : cp .../django/contrib/admin/templates/admin/change_form.html mon_projet/templates/admin/app/model/admin/change_form.html Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 23. Admin : Surclassage des templates II Parfois, ça ne suffit pas Dans change_list.html on ne peut pas changer change_list_result : {% block result_list %} {% if action_form and actions_on_top and cl.full_result_count %} {% admin_actions %} {% endif %} {% result_list cl %} {% if action_form and actions_on_bottom and cl.full_result_count %} {% admin_actions %} {% endif %} {% endblock %} Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 24. Impossible n’est pas python La solution Créer un templatetags result_list qui va écraser le templatetag originel : def result_list(cl): """ Displays the headers and data list together """ return {’cl’: cl, ’result_hidden_fields’: list(result_hidden_fields(cl)), ’result_headers’: list(result_headers(cl)), ’results’: list(results(cl))} template = "admin/options/change_list_results_custom.html" result_list = register.inclusion_tag(template)(result_list) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 25. Impossible n’est pas python : la suite Dans les templates... Copiez le change_list.html de django dans votre projet Copiez le change_list_results.html de django dans votre projet Renommez le change_list_results_custom.html Hackez ! Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 26. Admin : Sorted Unicode La problématique Dans l’interface d’admin, les models sont auto classés par ordre alphabétique Les singes à trois bras âme sensible s’abstenir une class SortedUnicode comme unicode avec un ordre de tri que l’on peut spécifier monkey-patcher la fonction capfirst pour qu’elle conserver l’ordre de tri défini dans SortedUnicode Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 27. Admin : Créer de nouvelles colonnes Dans l’admin on ne veut pas toujours afficher des champs de models... Les property à la rescousse : dans models.py @property def tag_names(self): """ Return the tag names, as a list """ return [ t[’name’] for t in tagging.models.Tag.objects.get_for_object(self).values(’name’) ] def tags_admin(self): tags = ’’ for tag in self.tag_names: tags = tags+tag+’, ’ return tags et dans admin.py list_display = (’tags_admin’) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 28. Custom Widgets La problématique Dans l’interface d’admin, on peut vouloir utiliser des contrôles plus intelligents Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 29. Custom Widgets Hookir le rendu de l’admin class MyModelAdmin(ContentAdmin): model = MyModel def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == ’my_field’: truc = do_something() class MyCustomWidget(forms.TextInput): class Media: js = ("js/myCustomWidget.js",) def __init__(self,*args,**kw): super(PictureChooserWidget,self).__init__(*args,**kw) self.truc = truc def render(self, name, value, attrs=None): rendered ="""<input name="my_field" value="" class="vTextField" maxlength="40" type="text" id="id_my_field">%s"""%self.truc return mark_safe(rendered) kwargs[’widget’] = MyCustomWidget return super(MyModelAdmin,self).formfield_for_dbfield(db_field,**kwargs) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 30. Les Templates Les Templates Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 31. Tour d’horizon des templates Plan d’action Que sont les templates ? La problèmatique Templates : Hacking Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 32. Templates : définition Définition Le T de MVC... Le modele de compilation d’un ensemble d’objet : le contexte Le HTML qui va accueillir les objets python Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 33. Templates : la problématique Les soucis posés Les templatetags et les filter sont parfois trop pauvre Les Templates est ce vraiment DRY ? Le Javascript, c’est pas DRY Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 34. Templates : Hacking Le DRY jusque dans les templates Les templatetags custom Les héritages de templates, les inclusions de templates Un python dans le café Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 35. les templatestags custom Filter @register.filter(name=’twitterparse’) @stringfilter def twitterparse(value): p = ttp.Parser() result = p.parse(value) return mark_safe(result.html) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 36. les templatestags custom Tags @register.inclusion_tag(’blocks/explain.html’) def get_explanation(name): try: explain=Explanation.objects.get(name=name) except ObjectDoesNotExist: explain = None return {"explanation":explain} Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 37. Heritage et inclusion de template base.html Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 38. Un serpent dans le café Rendre javascript python-aware, un exemple avec float var time_data_set = { all : {label:"all", data:{{graph_all}}, points: { show: true }, lines:{ show: true}, color:0 }, Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 39. Un serpent dans le café II Rendre javascript python-aware un peu plus loin {% if hashtags %} var r = Raphael("holder",470,255); var r_10 = Raphael("hashtags_holder",470,255) var legends = new Array() var legends_10 = new Array() var hrefs = new Array() var all = new Array() var serie = new Array() {% for hashtag in hashtags %} {% ifchanged hashtag.name %} all.push(["{{hashtag.name}}", {{hashtag.times}}]) {% endifchanged %} {% endfor %} {% endif %} Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 40. Les autres éléments à ne pas oublier Les autres éléments à ne pas oublier Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 41. Middleware et Managements Les MiddleWare proccess_request proccess_view process_exception proccess_response Les Managements Comment ça marche ? Les managements custom Les Managements dans le vues (où ailleurs... d’ailleurs) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 42. Les Middlewares process_request def process_request(self, request): """ Here I can do whatever I want against the request """ print request process_view def process_view(self,request,view_func, view_args,view_kwarg): """ Process the view to get info on the context """ print view_func,view_args,view_kwarg return None #if I return something here it stops ! Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 43. Les Middlewares, suite process_exception def process_exception(self,request,exception): print type(exception) print exception.args return None process_response def process_response(self,request,response): print connection.queries return response Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 44. Les Managements Comment ça marche ? python manage.py runserver python manage.py syncdb ... Les managements custom ? def handle(self,user,requested_user=None,**options): user = DjangoUser.objects.get(username=user) fetch_tweets(user,requested_user=requested_user) Lancer un management en python from django.core.management import call_command call_command(’fetch’, user,user_type) Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 45. Conclusion Conclusion Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 46. Conclusion Simplifier la vie des développeurs... ...par la souplesse de Python ...par la discretion de Django ... et pour ne garder que le plaisir ! Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 47. Remerciements Remerciements aux communautés Python et Django Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes
  • 48. La page de pub Pilot Systems, société de services en logiciels libres : http://www.pilotsystems.net Slides en licence CC-By-Sa http://contributions.pilotsystems.net/ Des questions ? Yohann G ABORY — Bruno D UPUIS Pilot Systems Django Hacking : Comment dresser les serpents guitaristes