goa/doc/quickstart.txt
changeset 6366 1806148d6ce8
parent 6333 e3994fcc21c3
parent 6365 a15cc5e16178
child 6367 d4c485ec1ca1
equal deleted inserted replaced
6333:e3994fcc21c3 6366:1806148d6ce8
     1 .. -*- coding: utf-8 -*-
       
     2 
       
     3 Introduction
       
     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 qui encaspule les résultats d'une requête adressée à l'entrepôt
       
    17   de données 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 squelette depuis le répertoire
       
    29 ``lax/skel`` vers un nouveau répertoire qui sera votre application
       
    30 ``Google AppEngine``::
       
    31 
       
    32   $ cp -r lax/skel myapp
       
    33 
       
    34 Définition du schéma
       
    35 --------------------
       
    36 
       
    37 Ouvrir le fichier ``myapp/schema.py`` afin de définir le schéma des
       
    38 données manipulées. La syntaxe de la définition est la même que celle
       
    39 proposée par `Google AppEngine`_ mais il faut remplacer la ligne
       
    40 d'import::
       
    41 
       
    42   from google.appengine.ext import db
       
    43 
       
    44 par celle-ci::
       
    45 
       
    46   from cubicweb.goa import db
       
    47 
       
    48 
       
    49 Un exemple de schéma de données pour un ``Blog`` pourrait être::
       
    50 
       
    51   from cubicweb.goa import db
       
    52 
       
    53   class Blog(db.Model):
       
    54       # un titre à donner à l'entrée
       
    55       title = db.StringProperty(required=True)
       
    56       # la date à laquelle le blog est créé
       
    57       diem = db.DateProperty(required=True, auto_now_add=True)
       
    58       # le contenu de l'entrée
       
    59       content = db.TextProperty()
       
    60       # une entrée peut en citer une autre
       
    61       cites = db.SelfReferenceProperty()
       
    62 
       
    63 
       
    64 Personnalisation des vues
       
    65 -------------------------
       
    66 
       
    67 ``LAX`` permet de générer directement, à partir de la définition
       
    68 du schéma, des vues de consultation, d'ajout et de modification
       
    69 pour tous les types de donées manipulés. Il est toutefois
       
    70 généralement souhaitable de personnaliser les vues de consultations.
       
    71 
       
    72 Dans ``LAX``, les vues sont représentées par des classes Python.
       
    73 
       
    74 Une vue se caractérise par :
       
    75 
       
    76 - un identifiant (tous les objets dans ``LAX`` sont enregistrés
       
    77   dans un registre et cet identifiant sert de clé pour y retrouver
       
    78   la vue)
       
    79 
       
    80 - une description des types de données auxquels elle s'applique
       
    81 
       
    82 Il existe dans ``LAX`` des vues prédéfinies et utilisées par le moteur
       
    83 d'affichage. Pour avoir une liste exhaustive de ces vues prédéfinies,
       
    84 vous pouvez consulter cette page. (XXX mettre le lien vers la liste).
       
    85 Par exemple, la vue ``primary`` est la vue utilisée pour générer la
       
    86 page principale de consultation d'un objet.
       
    87 
       
    88 Par exemple, si on souhaite modifier la page principale d'une entrée de
       
    89 blog, il faut surcharger la vue ``primary`` des objets ``Blog`` dans
       
    90 le fichier ``myapp/views.py``::
       
    91 
       
    92   from cubicweb.web.views import baseviews
       
    93 
       
    94   class BlogPrimaryView(baseviews.PrimaryView):
       
    95       accepts = ('Blog',)
       
    96 
       
    97       def cell_call(self, row, col):
       
    98           entity = self.rset.get_entity(row, col)
       
    99           self.w(u'<h1>%s</h1>' % entity.title)
       
   100           self.w(u'<div>%s</div>' entity.content)
       
   101 
       
   102 
       
   103 Génération du graphique de schéma
       
   104 ---------------------------------
       
   105 
       
   106 Il existe une vue ``schema`` qui permet d'afficher un graphique
       
   107 représantant les différents types d'entités définis dans le schéma
       
   108 ainsi que les relations entre ces types. Ce graphique doit être généré
       
   109 statiquement. Le script à utiliser pour générer ce schéma est
       
   110 dans ``myapp/tools``. Ce script nécessite d'avoir accès aux
       
   111 bibliothèques fournies par le SDK de ``Google AppEngine``. Il faut
       
   112 donc modifier son PYTHONPATH::
       
   113 
       
   114   $ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
       
   115   $ python tools/generate_schema_img.py
       
   116 
       
   117 
       
   118 Génération des fichiers de traduction
       
   119 -------------------------------------
       
   120 
       
   121 Des catalogues de traduction se trouvent dans `myapp/i18n`. Il faut
       
   122 pour l'instant les mettre à jour à la main (et/ou avec les outils
       
   123 ``GNU`` comme ``xgettext``) et ensuite les compiler grâce au script
       
   124 ``myapp/tools/i18ncompile.py``::
       
   125 
       
   126   $ python tools/i18ncompile.py
       
   127 
       
   128 .. _`Google AppEngine` :: http://code.google.com/appengine/docs/datastore/overview.html