Diferència entre revisions de la pàgina «Pyramid: arquitectura»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 2: Línia 2:
  
 
Abans de treballar aquest apartat, cal que us familiaritzeu amb aquest framework (mireu el link anterior).
 
Abans de treballar aquest apartat, cal que us familiaritzeu amb aquest framework (mireu el link anterior).
 +
 +
Pyramid utilitza l'arquitectura [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller model-vista-controlador].
  
 
== Aïllament del codi i el disseny ==
 
== Aïllament del codi i el disseny ==
Línia 44: Línia 46:
 
** Conf. directori ''static''
 
** Conf. directori ''static''
 
** Configuració de les rutes: traducció de les URLs -> funcions (views).
 
** Configuració de les rutes: traducció de les URLs -> funcions (views).
* views.py : codi de les views
+
* views.py
* templates (carpeta) : trobarem plantilles que son
+
** Codi de les views (el què s'executarà abans de renderitzar la plantilla).
 +
* templates (carpeta) : plantilles (documents model per ser renderitzats).
 +
** '''MAKO templates''' (arxius .MAKO) : http://www.makotemplates.org . Són els més simples i propers al llenguatge Python i el que utilitzarem per defecte.
 +
** '''ZOPE Page Templates''' (arxius .PT) : Són més complexes però afegeixen més funcionalitat com internacionalització (sistema de traducció), etc.
 +
*** http://docs.zope.org/zope2/zope2book/ZPT.html
 +
*** http://zpt.sourceforge.net/
 +
** ... hi ha un gran nombre de sistemes de plantilles.
 +
<br>
 +
 
 +
== Per crear una nova pàgina ==
 +
# Crear una nova view en views.py
 +
#* Tenir cura de no sobreescriure el nom de la funció de la view.
 +
# Afegir la ruta (URL) que ens portarà a la view:
 +
#* A l'arxiu __init__.py
 +
# Crear la plantilla (template) que renderitzarà la view.
 +
#* Crear un nou arxiu .mako a la carpeta "templates".
 +
#* La plantilla ha d'estar "lligada" a la view (pel paràmetre "renderer" del ''decorator'').
 +
<br>
 +
 
 +
== Views i Plantilles (templates) ==
 +
Mostrarem un petit exemple de com es passen la informació entre el codi (view) i la plantilla.
 +
 
 +
A la view generarem les dades a partir d'arxius o de bases de dades. Quan acabem de processar-ho '''retornarem les dades a la plantilla en forma de diccionari'''. En aquest exemple tenim:
 +
<syntaxhighlight lang="Python">
 +
@view_config(route_name='productes', renderer='productes.mako')
 +
def productes_view(request):
 +
  # aqui aniriem als arxius o la base de dades a buscar la informació
 +
  # ... posem que tenim 3 variables: pepino, enciam i plàtan
 +
  # els retornarem amb:
 +
  return { "producte1": "pepino", "producte2": "enciam", "producte3": "plàtan" }
 +
</syntaxhighlight>
 +
 
 +
és clar que seria més sensat tornar una llista amb els 3 productes:
 +
<syntaxhighlight lang="Python">
 +
@view_config(route_name='productes', renderer='productes.mako')
 +
def productes_view(request):
 +
  # aqui aniriem als arxius o la base de dades a buscar la informació
 +
  # ... posem que una llista "verdures" amb 3 productes:
 +
  # verdures = [ 'pepino' , 'enciam' , 'plàtan' ]
 +
  # els retornarem amb:
 +
  return { "productes": verdures }
 +
</syntaxhighlight>
 +
 
 +
Per poder utilitzar aquestes variables a la plantilla (productes.mako):
 +
...TODO...

Revisió del 12:40, 10 des 2012

Aquest és un article que detalla l'original Python: Pyramid framework.

Abans de treballar aquest apartat, cal que us familiaritzeu amb aquest framework (mireu el link anterior).

Pyramid utilitza l'arquitectura model-vista-controlador.

Aïllament del codi i el disseny

Una de les idees més importants en Pyramid (i en la majordia de frameworks) és facilitar la creació i el manteniment dels projectes. Per aquesta raó es sol buscar l'aïllament entre el codi (contingut, dades manipulades amb Python) i el disseny (forma, HTML). En Pyramid això es realitza mitjançant la utilització de les views (codi de la pàgina) que es renderitzen en les plantilles (.pt o .mako).

Tal com diem, ens convé separar netament:

  • Codi: dades, manipulació amb un llenguatge de programació. Arixu views.py
  • Disseny: aparença de la web (HTML, CSS). Carpeta templates: arxius .pt o .mako


Arxius d'un projecte Pyramid

L'arquitectura bàsica d'una site Pyramid , just quan creem el scaffold bàsic és (en negreta les que ens interessen):

simpleshop/
├── CHANGES.txt
├── development.ini       # arxiu de conf. de l'entorn (port d'escolta, etc.)
├── MANIFEST.in
├── production.ini
├── README.txt
├── setup.cfg
├── setup.py
└── simpleshop            # arxiu de conf. de l'entorn (port d'escolta, etc.)
    ├── __init__.py       # arxiu __INIT__
    ├── static
    │   ├── favicon.ico
    │   ├── footerbg.png
    │   ├── headerbg.png
    │   ├── ie6.css
    │   ├── middlebg.png
    │   ├── pylons.css    # CSS (full d'estils)
    │   ├── pyramid.png
    │   ├── pyramid-small.png
    │   └── transparent.gif
    ├── templates
    │   └── mytemplate.pt # template principal
    ├── tests.py
    └── views.py          # arxiu VIEWS


Parts bàsiques del projecte

  • __init__.py : codi d'arrencada. Hi trobarem:
    • Configuració general de l'aplicació
    • Conf. directori static
    • Configuració de les rutes: traducció de les URLs -> funcions (views).
  • views.py
    • Codi de les views (el què s'executarà abans de renderitzar la plantilla).
  • templates (carpeta) : plantilles (documents model per ser renderitzats).


Per crear una nova pàgina

  1. Crear una nova view en views.py
    • Tenir cura de no sobreescriure el nom de la funció de la view.
  2. Afegir la ruta (URL) que ens portarà a la view:
    • A l'arxiu __init__.py
  3. Crear la plantilla (template) que renderitzarà la view.
    • Crear un nou arxiu .mako a la carpeta "templates".
    • La plantilla ha d'estar "lligada" a la view (pel paràmetre "renderer" del decorator).


Views i Plantilles (templates)

Mostrarem un petit exemple de com es passen la informació entre el codi (view) i la plantilla.

A la view generarem les dades a partir d'arxius o de bases de dades. Quan acabem de processar-ho retornarem les dades a la plantilla en forma de diccionari. En aquest exemple tenim:

@view_config(route_name='productes', renderer='productes.mako')
def productes_view(request):
   # aqui aniriem als arxius o la base de dades a buscar la informació
   # ... posem que tenim 3 variables: pepino, enciam i plàtan
   # els retornarem amb:
   return { "producte1": "pepino", "producte2": "enciam", "producte3": "plàtan" }

és clar que seria més sensat tornar una llista amb els 3 productes:

@view_config(route_name='productes', renderer='productes.mako')
def productes_view(request):
   # aqui aniriem als arxius o la base de dades a buscar la informació
   # ... posem que una llista "verdures" amb 3 productes:
   # verdures = [ 'pepino' , 'enciam' , 'plàtan' ]
   # els retornarem amb:
   return { "productes": verdures }

Per poder utilitzar aquestes variables a la plantilla (productes.mako): ...TODO...