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.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 |
|