doc/book/MERGE_ME-tut-create-gae-app.en.txt
changeset 12792 e2cdb1be6bd9
parent 10491 c67bcee93248
equal deleted inserted replaced
12791:4564ecfc0134 12792:e2cdb1be6bd9
     3 .. _tutorielGAE:
     3 .. _tutorielGAE:
     4 
     4 
     5 Tutoriel : créer votre première application web pour Google AppEngine
     5 Tutoriel : créer votre première application web pour Google AppEngine
     6 =====================================================================
     6 =====================================================================
     7 
     7 
     8 Ce tutoriel va vous guider pas à pas a construire une apllication web 
     8 Ce tutoriel va vous guider pas à pas a construire une apllication web
     9 de gestion de Blog afin de vous faire découvrir les fonctionnalités de
     9 de gestion de Blog afin de vous faire découvrir les fonctionnalités de
    10 *CubicWeb*.
    10 *CubicWeb*.
    11 
    11 
    12 Nous supposons que vous avec déjà suivi le guide :ref:`installationGAE`.
    12 Nous supposons que vous avec déjà suivi le guide :ref:`installationGAE`.
    13 
    13 
    15 Créez une nouvelle application
    15 Créez une nouvelle application
    16 ------------------------------
    16 ------------------------------
    17 
    17 
    18 Nous choisissons dans ce tutoriel de développer un blog comme un exemple
    18 Nous choisissons dans ce tutoriel de développer un blog comme un exemple
    19 d'application web et nous allons expliciter toutes les étapes nécessaires
    19 d'application web et nous allons expliciter toutes les étapes nécessaires
    20 à sa réalisation.  
    20 à sa réalisation.
    21 
    21 
    22 ::
    22 ::
    23   
    23 
    24   cubicweb-ctl newgapp blogdemo
    24   cubicweb-ctl newgapp blogdemo
    25 
    25 
    26 `newgapp` est la commande permettant de créer une instance *CubicWeb* pour
    26 `newgapp` est la commande permettant de créer une instance *CubicWeb* pour
    27 le datastore.
    27 le datastore.
    28 
    28 
    53       text = String(fulltextindexed=True)
    53       text = String(fulltextindexed=True)
    54       category = String(vocabulary=('important','business'))
    54       category = String(vocabulary=('important','business'))
    55       entry_of = SubjectRelation('Blog', cardinality='?*')
    55       entry_of = SubjectRelation('Blog', cardinality='?*')
    56 
    56 
    57 
    57 
    58 Un ``Blog`` a un titre et une description. Le titre est une chaîne 
    58 Un ``Blog`` a un titre et une description. Le titre est une chaîne
    59 de caractères requise par la classe parente EntityType and ne doit
    59 de caractères requise par la classe parente EntityType and ne doit
    60 pas excéder 50 caractères. La description est une chaîne de 
    60 pas excéder 50 caractères. La description est une chaîne de
    61 caractères sans contraintes.
    61 caractères sans contraintes.
    62 
    62 
    63 Une ``BlogEntry`` a un titre, une date de publication et du texte
    63 Une ``BlogEntry`` a un titre, une date de publication et du texte
    64 étant son contenu. Le titre est une chaîne de caractères qui ne 
    64 étant son contenu. Le titre est une chaîne de caractères qui ne
    65 doit pas excéder 100 caractères. La date de publication est de type Date et a
    65 doit pas excéder 100 caractères. La date de publication est de type Date et a
    66 pour valeur par défaut TODAY, ce qui signifie que lorsqu'une 
    66 pour valeur par défaut TODAY, ce qui signifie que lorsqu'une
    67 ``BlogEntry`` sera créée, sa date de publication sera la date
    67 ``BlogEntry`` sera créée, sa date de publication sera la date
    68 courante a moins de modifier ce champ. Le texte est une chaîne de
    68 courante a moins de modifier ce champ. Le texte est une chaîne de
    69 caractères qui sera indexée en plein texte et sans contraintes.
    69 caractères qui sera indexée en plein texte et sans contraintes.
    70 
    70 
    71 Une ``BlogEntry`` a aussi une relation nommée ``entry_of`` qui la
    71 Une ``BlogEntry`` a aussi une relation nommée ``entry_of`` qui la
    72 relie à un ``Blog``. La cardinalité ``?*`` signifie que BlogEntry
    72 relie à un ``Blog``. La cardinalité ``?*`` signifie que BlogEntry
    73 peut faire partie de zero a un Blog (``?`` signifie `zero ou un`) et
    73 peut faire partie de zero a un Blog (``?`` signifie `zero ou un`) et
    74 qu'un Blog peut avoir une infinité de BlogEntry (``*`` signifie
    74 qu'un Blog peut avoir une infinité de BlogEntry (``*`` signifie
    75 `n'importe quel nombre incluant zero`). 
    75 `n'importe quel nombre incluant zero`).
    76 Par soucis de complétude, nous rappellerons que ``+`` signifie
    76 Par soucis de complétude, nous rappellerons que ``+`` signifie
    77 `un ou plus`.
    77 `un ou plus`.
    78 
    78 
    79 Lancez l'application
    79 Lancez l'application
    80 --------------------
    80 --------------------
    81 
    81 
    82 Définir ce simple schéma est suffisant pour commencer. Assurez-vous 
    82 Définir ce simple schéma est suffisant pour commencer. Assurez-vous
    83 que vous avez suivi les étapes décrites dans la section installation
    83 que vous avez suivi les étapes décrites dans la section installation
    84 (en particulier visitez http://localhost:8080/_load en tant qu'administrateur
    84 (en particulier visitez http://localhost:8080/_load en tant qu'administrateur
    85 afin d'initialiser le datastore), puis lancez votre application avec la commande ::
    85 afin d'initialiser le datastore), puis lancez votre application avec la commande ::
    86    
    86 
    87    python dev_appserver.py BlogDemo
    87    python dev_appserver.py BlogDemo
    88 
    88 
    89 puis dirigez vous vers http://localhost:8080/ (ou si c'est plus facile
    89 puis dirigez vous vers http://localhost:8080/ (ou si c'est plus facile
    90 vous pouvez utiliser la démo en ligne http://lax.appspot.com/).
    90 vous pouvez utiliser la démo en ligne http://lax.appspot.com/).
    91 [FIXME] -- changer la demo en ligne en quelque chose qui marche (!)
    91 [FIXME] -- changer la demo en ligne en quelque chose qui marche (!)
    92 
    92 
    93 .. image:: images/lax-book.00-login.en.png
    93 .. image:: images/lax-book.00-login.en.png
    94    :alt: login screen
    94    :alt: login screen
    95 
    95 
    96 Après vous être authentifié, vous arrivez sur la page d'accueil de votre 
    96 Après vous être authentifié, vous arrivez sur la page d'accueil de votre
    97 application. Cette page liste les types d'entités accessibles dans votre
    97 application. Cette page liste les types d'entités accessibles dans votre
    98 application, en l'occurrence : Blog et Articles. Si vous lisez ``blog_plural``
    98 application, en l'occurrence : Blog et Articles. Si vous lisez ``blog_plural``
    99 et ``blogentry_plural`` cela signifie que l'internationalisation (i18n)
    99 et ``blogentry_plural`` cela signifie que l'internationalisation (i18n)
   100 n'a pas encore fonctionné. Ignorez cela pour le moment.
   100 n'a pas encore fonctionné. Ignorez cela pour le moment.
   101 
   101 
   128 
   128 
   129 .. image:: images/lax-book.02-create-blog.en.png
   129 .. image:: images/lax-book.02-create-blog.en.png
   130    :alt: from to create blog
   130    :alt: from to create blog
   131 
   131 
   132 En cliquant sur le logo situé dans le coin gauche de la fenêtre,
   132 En cliquant sur le logo situé dans le coin gauche de la fenêtre,
   133 vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez 
   133 vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez
   134 sur le lien Blog, vous devriez voir la liste des entités Blog, en particulier
   134 sur le lien Blog, vous devriez voir la liste des entités Blog, en particulier
   135 celui que vous venez juste de créer ``Tech-Blog``.
   135 celui que vous venez juste de créer ``Tech-Blog``.
   136 
   136 
   137 .. image:: images/lax-book.03-list-one-blog.en.png
   137 .. image:: images/lax-book.03-list-one-blog.en.png
   138    :alt: displaying a list of a single blog
   138    :alt: displaying a list of a single blog
   158 Revenons sur la page d'accueil et cliquons sur `[+]` à droite du lien
   158 Revenons sur la page d'accueil et cliquons sur `[+]` à droite du lien
   159 `articles`. Appellons cette nouvelle entité ``Hello World`` et introduisons
   159 `articles`. Appellons cette nouvelle entité ``Hello World`` et introduisons
   160 un peut de texte avant de ``Valider``. Vous venez d'ajouter un article
   160 un peut de texte avant de ``Valider``. Vous venez d'ajouter un article
   161 sans avoir précisé à quel Blog il appartenait. Dans la colonne de gauche
   161 sans avoir précisé à quel Blog il appartenait. Dans la colonne de gauche
   162 se trouve une boite intitulé ``actions``, cliquez sur le menu ``modifier``.
   162 se trouve une boite intitulé ``actions``, cliquez sur le menu ``modifier``.
   163 Vous êtes de retour sur le formulaire d'édition de l'article que vous 
   163 Vous êtes de retour sur le formulaire d'édition de l'article que vous
   164 venez de créer, à ceci près que ce formulaire a maintenant une nouvelle
   164 venez de créer, à ceci près que ce formulaire a maintenant une nouvelle
   165 section intitulée ``ajouter relation``. Choisissez ``entry_of`` dans ce menu,
   165 section intitulée ``ajouter relation``. Choisissez ``entry_of`` dans ce menu,
   166 cela va faire apparaitre une deuxième menu déroulant dans lequel vous
   166 cela va faire apparaitre une deuxième menu déroulant dans lequel vous
   167 allez pouvoir séléctionner le Blog ``MyLife``.
   167 allez pouvoir séléctionner le Blog ``MyLife``.
   168 
   168 
   171 
   171 
   172 .. image:: images/lax-book.06-add-relation-entryof.en.png
   172 .. image:: images/lax-book.06-add-relation-entryof.en.png
   173    :alt: editing a blog entry to add a relation to a blog
   173    :alt: editing a blog entry to add a relation to a blog
   174 
   174 
   175 Validez vos modifications en cliquant sur ``Valider``. L'entité article
   175 Validez vos modifications en cliquant sur ``Valider``. L'entité article
   176 qui est listée contient maintenant un lien vers le Blog auquel il 
   176 qui est listée contient maintenant un lien vers le Blog auquel il
   177 appartient, ``MyLife``.
   177 appartient, ``MyLife``.
   178 
   178 
   179 .. image:: images/lax-book.07-detail-one-blogentry.en.png
   179 .. image:: images/lax-book.07-detail-one-blogentry.en.png
   180    :alt: displaying the detailed view of a blogentry
   180    :alt: displaying the detailed view of a blogentry
   181 
   181 
   204 
   204 
   205 What we learned
   205 What we learned
   206 ~~~~~~~~~~~~~~~
   206 ~~~~~~~~~~~~~~~
   207 
   207 
   208 Creating a simple schema was enough to set up a new application that
   208 Creating a simple schema was enough to set up a new application that
   209 can store blogs and blog entries. 
   209 can store blogs and blog entries.
   210 
   210 
   211 What is next ?
   211 What is next ?
   212 ~~~~~~~~~~~~~~
   212 ~~~~~~~~~~~~~~
   213 
   213 
   214 Although the application is fully functionnal, its look is very
   214 Although the application is fully functionnal, its look is very