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