Diferència entre revisions de la pàgina «Instal·lació de Plone. Base de dades ZODB»

De wikijoan
Salta a la navegació Salta a la cerca
 
(Hi ha 2 revisions intermèdies del mateix usuari que no es mostren)
Línia 114: Línia 114:
 
</pre>
 
</pre>
 
''find'' troba que hi ha coincidències, però com que és un fitxer binari en comptes de text pla, no les troba.
 
''find'' troba que hi ha coincidències, però com que és un fitxer binari en comptes de text pla, no les troba.
 +
==Python i ZODB==
 +
Seguim l'exemple bàsic de:
 +
*https://zodb.org/en/latest/articles/ZODB1.html
 +
 +
ZODB is a database for Python objects that comes with Zope. If you’ve ever worked with a relational database, like PostgreSQL, MySQL, or Oracle, than you should be familiar with the role of a database. It’s a long term or short term storage for your application data.
 +
 +
Fem servir Python3 per interactuar amb ZODB. Necessitem els mòduls de ZODB. pip és l'eina per instal·lar els mòduls. El professor fa servir pip3, però segurament a tu et caldrà tan sols '''pip''':
 +
<pre>
 +
$ pip install zodb
 +
$ pip install persistence
 +
</pre>
 +
fer l'exemple interactiu de la pàgina.
 +
 +
En el següent exemple anem a crear un ''filestorage'' per emmagatzemar una informació mínims, i demostrar que podem crear un filestorage, crear contingut, modificar-lo i esborrar-lo:
 +
<pre>
 +
$ python3
 +
>>> -> vol dir que estem en mode interactiu
 +
>>> from ZODB import FileStorage, DB
 +
>>> storage = FileStorage.FileStorage('mydatabase.fs')
 +
>>> db = DB(storage)
 +
>>> connection = db.open()
 +
>>> root = connection.root()
 +
 +
>>> root['employees'] = ['Mary', 'Jo', 'Bob']
 +
 +
>>> import transaction
 +
>>> transaction.commit()
 +
>>> root.items()
 +
[('employees', ['Mary', 'Jo', 'Bob'])]
 +
 +
>>> root['employees'].append('Bill')
 +
>>> transaction.commit()
 +
>>> root.items()
 +
</pre>
 +
I aquest exemple el podem posar en un script python, que és la manera habitual de treballar.
 +
 +
script '''exemple_odb.py''':
 +
<pre>
 +
from ZODB import FileStorage, DB
 +
import transaction
 +
storage = FileStorage.FileStorage('mydatabase.fs')
 +
db = DB(storage)
 +
connection = db.open()
 +
root = connection.root()
 +
root['employees'] = ['Mary', 'Jo', 'Bob']
 +
root['clients'] = ['Pere', 'Maria', 'Rita']
 +
print(root.items())
 +
root['clients'].append('Jordi')
 +
 +
transaction.commit()
 +
print(root.items())
 +
</pre>
 +
Per executar-ho:
 +
<pre>
 +
$ python exemple_odb.py
 +
</pre>
 +
(Fixeu-vos que hem hagut de posar ''prints''. El professor utilitza ''python3'' en comptes de ''python'' com a comanda, perquè potser en un sistema coexisteixen les versions 2 i 3 de Python.
 +
 +
Fixeu-vos bé que tota aquesta informació es presenta en format JSON (aquest format és molt important, XML va a menys, JSON s'utilitza cada vegada més).
  
 
=Entrega=
 
=Entrega=

Revisió de 15:14, 22 abr 2021

Introducció

És un CMS de propòsit general que utiltiza Python com a backend i ZODB com a base de dades (una base de dades no-sql que utilitza objectes Pyhton)

Referències

Desenvolupament

Instal·lació

demo que es restaura cada 4 hores: https://demo.plone.org/es

Instal·lació:

Descarreguem:

Escollim l'opció: unified installer tarball (all platforms)

Requeriments mínims:

Tenim un script d'instal·lació:

cd /home/joan/M09_IAW_2021/UF2/Plone-5.2.4-UnifiedInstaller-1.0/
./install.sh

s'instal·larà a /home/joan/Plone. En el procés d'instal·lació protesta si no complim els requeriments:

Testing /usr/bin/python3.8 for Zope/Plone requirements....                   │
/usr/bin/python3.8 looks OK. We will use it.                                 │
│                                                                            │
Unable to find libjpeg library and headers. These are required to build Plone. Please use your system package or port manager to install libjpeg dev. (Debian/Ubuntu libjpeg-dev) Exiting now.  

I ens està dient que ens falta una llibreria (necessària per a poder manipular imatges). Instal·lem el paqet Debian de la llibreria:

$ sudo apt-get install libjpeg-dev
./install.sh
...
Unable to find libxml2 development libraries.

Plone installation requires the development versions of libxml2 and libxslt.
libxml2 must be version 2.7.8 or greater\; libxslt must be 1.1.26 or greater.
Ideally, you should install these as dev package libraries before running install.sh.

Tornem a necessitar unes altres llibreries, en aquest cas relacionades amb XML:

$ libxml2-dev - Development files for the GNOME XML library
$ libxslt1-dev - XSLT 1.0 processing library - development kit

sudo apt-get install libxml2-dev libxslt1-dev

I ara ja podem continuar:

./install.sh
...
######################  Installation Complete  ######################

Plone successfully installed at /home/joan/Plone
See /home/joan/Plone/zinstance/README.html
for startup instructions.

Use the account information below to log into the Zope Management Interface
The account has full 'Manager' privileges.

  Username: admin
  Password: nTfSJDQUP0fq

This account is created when the object database is initialized. If you change
the password later (which you should!), you'll need to use the new password.

Use this account only to create Plone sites and initial users. Do not use it
for routine login or maintenance.- If you need help, ask in our forum https://community.plone.org - Live chat channels also exists at http://plone.org/support/chat - Submit feedback and report errors at https://github.com/plone/Products.CMFPlone/issues (For install problems, https://github.com/plone/Installers-UnifiedInstaller/issues)

Per arrencar el Plone farem:

$ cd ~/Plone/zinstance
$ bin/plonectl fg
...
Starting server in PID 13587.
Serving on http://0.0.0.0:8080

I per tant podrem accedir al Plone des del navegador web, pel port 8080:

By default, Plone will listen to port 8080 on available network interfaces. The port may be changed by editing buildout.cfg and re-running buildout.

Utilitzar Plone

La idea és accedir al Plone, logar-te amb el login i password que se t'ha proporcionat, i crear una mica de contingut. La primera vegada despista una mica, però quan et logues veuràs que a la zona de l'esquerre hi ha la zona d'administració, i des d'allà podràs crear per exemple dues notícies.

A Plone podem crear aquest tipus de continguts: Carpeta, col·lecció, enllaç, esdeveniment, fitxer, imatge, notícia, pàgina.

Sabent crear i editar tots aquests tipus de continguts, es pot fer un CMS a la mida del que necessites, com ho demostra tota la gent que és partidària de Plone.

Base de dades ZODB

La informació de Plone es guarda en una base de dades ZODB, que està a la carpeta var/filestorage/ dins de /home/joan/Plone/zinstance.

Usually Plone's database is configured to file var/filestorage/Data.fs and uploaded files can be found as BLOBs in var/blobstorage.

Per tant, anem a cercar aquest fitxer, i que conté la informació (els bytes) que hem introduït en la Notícia que hem creat. Només cal utilitzar la comanda cat (o també podem utilitzar find per cercar una paraula dins del fitxer):

$ cd ~/Plone/zinstance/var/filestorage
$ cat Data.fs
...
<a title="Modifica la secció: Les quatre grans cròniques" href="https://ca.wikipedia.org/w/index.php?title=Les_quatre_grans_Cr%C3%B2niques&action=edit&section=1">modifica</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>Les quatre grans cròniques són:</p>
...
$ find . -type f -print | xargs egrep -i "Cerimoniós"
Hi ha coincidències en el fitxer binari ./Data.fs.tmp
Hi ha coincidències en el fitxer binari ./Data.fs

find troba que hi ha coincidències, però com que és un fitxer binari en comptes de text pla, no les troba.

Python i ZODB

Seguim l'exemple bàsic de:

ZODB is a database for Python objects that comes with Zope. If you’ve ever worked with a relational database, like PostgreSQL, MySQL, or Oracle, than you should be familiar with the role of a database. It’s a long term or short term storage for your application data.

Fem servir Python3 per interactuar amb ZODB. Necessitem els mòduls de ZODB. pip és l'eina per instal·lar els mòduls. El professor fa servir pip3, però segurament a tu et caldrà tan sols pip:

$ pip install zodb
$ pip install persistence

fer l'exemple interactiu de la pàgina.

En el següent exemple anem a crear un filestorage per emmagatzemar una informació mínims, i demostrar que podem crear un filestorage, crear contingut, modificar-lo i esborrar-lo:

$ python3
>>> -> vol dir que estem en mode interactiu
>>> from ZODB import FileStorage, DB
>>> storage = FileStorage.FileStorage('mydatabase.fs')
>>> db = DB(storage)
>>> connection = db.open()
>>> root = connection.root()

>>> root['employees'] = ['Mary', 'Jo', 'Bob']

>>> import transaction
>>> transaction.commit()
>>> root.items()
[('employees', ['Mary', 'Jo', 'Bob'])]

>>> root['employees'].append('Bill')
>>> transaction.commit()
>>> root.items()

I aquest exemple el podem posar en un script python, que és la manera habitual de treballar.

script exemple_odb.py:

from ZODB import FileStorage, DB
import transaction
storage = FileStorage.FileStorage('mydatabase.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
root['employees'] = ['Mary', 'Jo', 'Bob']
root['clients'] = ['Pere', 'Maria', 'Rita']
print(root.items())
root['clients'].append('Jordi')

transaction.commit()
print(root.items())

Per executar-ho:

$ python exemple_odb.py

(Fixeu-vos que hem hagut de posar prints. El professor utilitza python3 en comptes de python com a comanda, perquè potser en un sistema coexisteixen les versions 2 i 3 de Python.

Fixeu-vos bé que tota aquesta informació es presenta en format JSON (aquest format és molt important, XML va a menys, JSON s'utilitza cada vegada més).

Entrega

Entregaràs la pràctica al Classroom. Has de demostrar que has realitzat els exercicis proposats a classe, com a mínim. Però, com sempre, hauries d'anar més enllà i explorar el CMS Plone i les possibilitats que té de configuració.


creat per Joan Quintana Compte, abril 2021