Diferència entre revisions de la pàgina «Pyramid: arquitectura»
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 | + | * views.py |
− | * templates (carpeta) : | + | ** 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.
Contingut
Aïllament del codi i el disseny
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).
- 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.
- ... hi ha un gran nombre de sistemes de plantilles.
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).
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...