doc/book/fr/introduction.fr.txt
author Sandrine Ribeau <sandrine.ribeau@logilab.fr>
Wed, 12 Nov 2008 19:19:53 -0800
changeset 54 e5cd878dc796
parent 51 8c5de7159cab
child 71 69a4bf8f5e49
permissions -rw-r--r--
Add images folder to share images between book/fr and book/en. Wrote a brief introduction on how to quickly run a simple blog application. Fix naming issues for Sphinx.

.. -*- coding: utf-8 -*-

.. _Overview:

Apercu rapide de `CubicWeb`
===========================

Un peu d'histoire...
--------------------

`CubicWeb` est une plate-forme logicielle de développement d'application web
qui est développée par Logilab_ depuis 2001. 


Entièrement développée en Python, `CubicWeb` publie des données provenant
de plusieurs sources telles que des bases de données SQL, des répertoire 
LDAP et des systèmes de gestion de versions tels que subversion. 


L'interface utilisateur de Logilab SDW a été spécialement conçue pour laisser 
à l'utilisateur final toute latitude pour sélectionner puis présenter les données. 
Elle permet d'explorer aisément la base de connaissances et d'afficher les 
résultats avec la présentation la mieux adaptée à la tâche en cours. 
La flexibilité de cette interface redonne à l'utilisateur le contrôle de 
paramètres d'affichage et de présentation qui sont habituellement réservés 
aux développeurs.

En 2008, `CubicWeb` a été porté pour un nouveau type de source: le datastore 
de GoogleAppEngine_.

.. _GoogleAppEngine: http://code.google.com/appengine/


Créez votre cube
----------------

Après avoir installé votre environement de développement `CubicWeb`, vous pouvez
commencer à construire votre premier cube: ::

  cubicweb-ctl newcube blog

Cela va créer dans ``/path/to/forest/cubes`` une répertoire contenant ::

  blog/
  |
  |-- data/
  |   |-- cubes.blog.css
  |   |-- cubes.blog.js  
  |   |-- external_resources
  |
  |-- debian/
  |   |-- changelog
  |   |-- compat
  |   |-- control
  |   |-- copyright
  |   |-- cubicweb-blog.prerm
  |   |-- rules
  |
  |-- entities.py
  |
  |-- i18n/
  |   |-- en.po
  |   |-- fr.po
  |
  |-- __init__.py
  |
  |-- MANIFEST.in
  |
  |-- migration/
  |   |-- postcreate.py
  |   |-- precreate.py
  |
  |-- __pkginfo__.py
  |
  |-- schema.py
  |
  |-- setup.py
  |
  |-- site_cubicweb.py
  |
  |-- sobjects.py
  |
  |-- test/
  |   |-- data/
  |       |-- bootstrap_cubes
  |   |-- pytestconf.py
  |   |-- realdb_test_blog.py
  |   |-- test_blog.py
  |
  |-- views.py

Toute modification apportée à votre modele de données devra
etre effectue dans ce répertoire. 


Créez votre instance
--------------------

::
  
  cubicweb-ctl create blogdemo

Cette commande va créer un répertoire ``~/etc/cubicweb.d/blogdemo``
contenant tous les fichiers de configuration nécessaire au lancement
de votre application web.

Définissez votre schéma de données
----------------------------------

Votre modele de données est défini dans le fichier ``schema.py`` de votre cube
``blog`` comme suit.

::

  from cubicweb.schema import format_constraint
  class Blog(EntityType):
    title = String(maxsize=50, required=True)
    description = String()

  class BlogEntry(EntityType):
    title = String(required=True, fulltextindexed=True, maxsize=256)
    content_format = String(meta=True, internationalizable=True, maxsize=50,
                            default='text/rest', constraints=[format_constraint])
    content = String(required=True, fulltextindexed=True)
    entry_of = SubjectRelation('Blog', cardinality='?*') 



Définissez les vues de vos données
----------------------------------

Les vues correspondantes au modele de données sont définies dans ``views.py``
de votre cube ``blog``.

:: 

  __docformat__ = "restructuredtext en"

  from mx.DateTime import DateTime
  from logilab.mtconverter import html_escape

  from cubicweb.common.uilib import text_cut
  from cubicweb.common.view import EntityView
  from cubicweb.web.views import baseviews
  from cubicweb.web.views.boxes import BoxTemplate, BoxHtml
  from cubicweb.web.views.calendar import MONTHNAMES
  from cubicweb.web.htmlwidgets import BoxLink, BoxWidget


  class BlogPrimaryView(baseviews.PrimaryView):
    accepts = ('Blog',)
    skip_attrs = baseviews.PrimaryView.skip_attrs + ('title',)

    def render_entity_title(self, entity):
        self.w(u'<h1>%s</h1>' % html_escape(entity.dc_title()))

    def render_entity_relations(self, entity, siderelations):
        rset = entity.related('entry_of', 'object')
        self.pagination(self.req, rset, self.w)
        self.wview('list', rset, 'null', title='')
    

  class BlogEntryPrimaryView(baseviews.PrimaryView):
    accepts = ('BlogEntry',)
    skip_attrs = baseviews.PrimaryView.skip_attrs + ('title',)
    show_attr_label = False

    def render_entity_title(self, entity):
        self.w(u'<h1>%s</h1>' % html_escape(entity.dc_title()))

    def content_format(self, entity):
        return entity.view('reledit', rtype='content_format')


Bienvenue dans votre application web
------------------------------------

Lancez votre application en exécutant : ::

  cubicweb-ctl start -D blogdemo


Vous pouvez à présent accéder a votre application web vous permettant de
créer des blogs et d'y poster des messages en visitant l'URL http://localhost:8080/.
Un premier formulaire d'authentification va vous être proposé. Par défaut,
l'application n'autorisera pas d'utilisateur anonyme à accéder a votre 
application. Vous devrez donc utiliser l'utilisateur administrateur que
vous aurez crée lors de l'initialisation de votre base de données via
``cubicweb-ctl create``.

.. image:: ../images/login-form.png


Une fois authentifié, vous pouvez commencer à jouer avec votre
application. Bravo !

.. image:: ../images/blog-demo-first-page.png