doc/book/fr/20-01-intro.fr.txt
brancholdstable
changeset 7074 e4580e5f0703
parent 6749 48f468f33704
parent 7073 4ce9e536dd66
child 7078 bad26a22fe29
child 7083 b8e35cde46e9
equal deleted inserted replaced
6749:48f468f33704 7074:e4580e5f0703
     1 .. -*- coding: utf-8 -*-
       
     2 
       
     3 Introduction à `LAX`
       
     4 ====================
       
     5 
       
     6 
       
     7 Concepts et vocabulaire
       
     8 -----------------------
       
     9 
       
    10 *schéma*
       
    11   le schéma définit le modèle de données d'une application sous forme
       
    12   d'entités et de relations. C'est l'élément central d'une
       
    13   application.
       
    14 
       
    15 *result set*
       
    16   objet encaspulant les résultats d'une requête à l'entrepôt de données
       
    17   et des informations sur cette requête.
       
    18 
       
    19 *vue*
       
    20   une vue est une manière de représenter les données d'un `result set`
       
    21   sous forme HTML, CSV, JSON, etc.
       
    22 
       
    23 
       
    24 
       
    25 Définition d'une application de Blog
       
    26 ====================================
       
    27 
       
    28 La première chose à faire est de copier le répertoire ``lax``
       
    29 vers un nouveau répertoire qui sera votre application ``Google AppEngine``::
       
    30 
       
    31   $ cp -r lax myapp
       
    32 
       
    33 Définition du schéma
       
    34 --------------------
       
    35 
       
    36 Ouvrir le fichier ``myapp/schema.py`` afin de définir le schéma des
       
    37 données manipulées. La syntaxe de la définition est la même que celle
       
    38 proposée par `Google AppEngine` mais il faut remplacer la ligne
       
    39 d'import::
       
    40 
       
    41   from google.appengine.ext import db
       
    42 
       
    43 par celle-ci::
       
    44 
       
    45   from ginco.goa import db
       
    46 
       
    47 
       
    48 Un exemple de schéma de données pour un ``Blog`` pourrait être::
       
    49 
       
    50   from ginco.goa import db
       
    51 
       
    52   class BlogEntry(db.Model):
       
    53       # un titre à donner à l'entrée
       
    54       title = db.StringProperty(required=True)
       
    55       # la date à laquelle le blog est créé
       
    56       diem = db.DateProperty(required=True, auto_now_add=True)
       
    57       # le contenu de l'entrée
       
    58       content = db.TextProperty()
       
    59       # une entrée peut en citer une autre
       
    60       cites = db.SelfReferenceProperty()
       
    61 
       
    62 
       
    63 Personnalisation des vues
       
    64 -------------------------
       
    65 
       
    66 `LAX` permet d'obtenir directement, à partir de la définition
       
    67 du schéma, de générer des vues de consultation, d'ajout et
       
    68 de modification pour tous les types de donées manipulés.
       
    69 Il est toutefois généralement souhaitable de personnaliser
       
    70 les vues de consultations.
       
    71 
       
    72 Dans `LAX`, les vues sont représentées par des classes Python.
       
    73 Une vue se caractèrise par :
       
    74 
       
    75 - un identifiant (tous les objets dans `LAX` sont enregistrés
       
    76   dans un registre et cet identifiant sert de clé pour y retrouver
       
    77   la vue)
       
    78 
       
    79 - une description des types de données auxquels elle s'applique
       
    80 
       
    81 Il existe dans `LAX` des vues prédéfinies et utilisées par le moteur
       
    82 d'affichage. Pour avoir une liste exhaustive de ces vues prédéfinies,
       
    83 vous pouvez consulter cette page. (XXX mettre le lien vers la liste).
       
    84 Par exemple, la vue ``primary`` est la vue utilisée pour générer la
       
    85 page principale de consultation d'un objet.
       
    86 
       
    87 Par exemple, si on souhaite modifier la page principale d'une entrée de
       
    88 blog, il faut surcharger la vue ``primary`` des objets ``BlogEntry`` dans
       
    89 le fichier ``myapp/views.py``::
       
    90 
       
    91   from ginco.web.views import baseviews
       
    92 
       
    93   class BlogEntryPrimaryView(baseviews.PrimaryView):
       
    94       accepts = ('BlogEntry',)
       
    95 
       
    96       def cell_call(self, row, col):
       
    97           entity = self.rset.get_entity(row, col)
       
    98           self.w(u'<h1>%s</h1>' % entity.title)
       
    99           self.w(u'<div>%s</div>' entity.content)
       
   100 
       
   101 
       
   102 Génération du graphique de schéma
       
   103 ---------------------------------
       
   104 
       
   105 Il existe une vue ``schema`` qui permet d'afficher un graphique
       
   106 représantant les différents types d'entités définis dans le schéma
       
   107 ainsi que les relations entre ces types. Ce graphique doit être généré
       
   108 statiquement. Le script à utiliser pour générer ce schéma est
       
   109 dans ``myapp/tools``. Ce script nécessite d'avoir accès aux
       
   110 bibliothèques fournies par le SDK de ``Google AppEngine``. Il faut
       
   111 donc modifier son PYTHONPATH::
       
   112 
       
   113   $ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
       
   114   $ python tools/generate_schema_img.py
       
   115 
       
   116 
       
   117 Génération des fichiers de traduction
       
   118 -------------------------------------
       
   119 
       
   120 Des catalogues de traduction se trouvent dans `myapp/i18n`. Il faut
       
   121 pour l'instant les mettre à jour à la main (et/ou avec les outils
       
   122 ``GNU`` comme ``xgettext``) et ensuite les compiler grâce au script
       
   123 ``myapp/tools/i18ncompile.py``::
       
   124 
       
   125   $ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
       
   126   $ python tools/i18ncompile.py
       
   127