Astrònom de suport

Astronomia per a enginyers | Enginyeria per a astrònoms

Com fer una web amb Python

Tal i com vaig prometre en l'última entrada, aquí us explico com crear un lloc web amb Python.

Hi ha moltes opcions per crear un lloc web fent servir Python. El què us explicaré a continuació és una de les moltes maneres possibles. Per tal de començar a fer una web amb Python, cal instal·lar un màxim de cinc programes, que són:

  1. Python.
  2. Pip.
  3. MySQL (opcional).
  4. Virtualenv (opcional, però recomanable).
  5. Django CMS.

En cas que l'ordinador no sigui vostre i no disposeu dels permisos necessaris per instal·lar els programes a l'ordinador (permisos de root), podeu:

  • Demanar al vostre administrador de sistemes que us instal·li Python, pip, virtualenv i, opcional, MySQL. Pel MySQL, caldrà que us doni la contrasenya de root.
  • En cas que estigueu fent servir un allotjament web compartit, el primer que heu de demanar és si suporten Python per fer pàgines web. Avui dia això ja és força habitual i, en cas de ser així, ja tindran Python, pip, virtualenv i una base de dades instal·lats. De tota manera, abans de començar a instal·lar el vostre lloc web en un allotjament compartit, és recomanable que el creeu primer en un ordinador en local.

1. Python

El primer pas abans de començar a fer una pàgina web en Python és assegurar-vos que teniu Python instal·lat. Per saber si teniu Python instal·lat, i quina versió hi ha instal·lada, només cal que escriviu, a la línia de comandes:

$> python --version
Python 2.7.5

El símbol $> és per indicar el text que cal escriure a la línia de comandes (python --version, en aquest cas). La resposta hauria de ser la versió de Python instal·lada, o un missatge d'error, en cas de no tenir Python instal·lat. En cas que no tingueu Python al vostre ordinador, només cal seguir els passos especificats a la pàgina web de Python, per instal·lar-lo.

2. Pip

Per instal·lar tots els paquets de Python que faran falta, és imprescindible tenir un gestor de paquets. El gestor de paquets de Python es diu pip i, per instal·lar pip, només cal seguir les instruccions de la seva pàgina web. Òbviament, el primer que cal fer és comprovar si el teniu instal·lat, tot escrivint:

$> pip --version
pip 1.5.4 from /Library/Python/2.7/site-packages (python 2.7)

La resposta variarà molt depenent del sistema operatiu. En aquest cas, la resposta anterior sol ser l'habitual d'un Mac. En cas de no tenir-lo instal·lat, l'opció més senzilla per instal·lar pip, amb els permisos adequats (com a root), seria:

$> curl -O https://bootstrap.pypa.io/get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1309k  100 1309k    0     0   363k      0  0:00:03  0:00:03 --:--:--  363k

$> python get-pip.py

En cas de no tenir el curl instal·lat, també podeu fer servir wget -o en lloc de curl -O.

3. MySQL (opcional)

Aquesta pàgina web fa servir MySQL com a base de dades. Així doncs, tot i que no és estrictament necessari, també podeu instal·lar MySQL. Si no us convenç MySQL, també podeu fer servir PostgreSQL. Si no teniu ni idea de bases de dades, senzillament us podeu saltar aquest pas. Per contra, si us interessa fer servir MySQL, podeu comprovar si està instal·lat escrivint:

$> mysql --version
mysql  Ver 14.14 Distrib 5.6.16, for osx10.7 (x86_64) using  EditLine wrapper

Un cop instal·lat, l'única cosa que cal fer amb aquest llenguatge és crear la base de dades. Per exemple, amb els permisos adequats de la base de dades (com a root):

$> echo "CREATE DATABASE example;" | mysql -u root -p
Enter password:

La base de dades de la web (anomenada aquí example) es crearà després d'introduir la contrasenya de root. Tot i que, amb això, ja n'hi hauria prou, és molt recomanable crear un usuari específic per accedir a la base de dades. Per tal de crear un usuari, cal fer:

$> mysql -u root -p
Enter password:
mysql> USE mysql;
mysql> CREATE USER example-user@localhost IDENTIFIED BY 'my-password';
mysql> GRANT ALL ON example.* TO 'example-user'@'localhost';
mysql> EXIT;

Amb aquestes comandes, s'ha creat un usuari example-user que pot accedir a la base de dades example, situada al vostre ordinador (localhost), mitjançant la contrasenya my-password. Això és tot el què cal fer per utilitzar MySQL com a base de dades. Més endavant ja us explicaré perquè es fa servir això.

4. Virtualenv (opcional, però recomanable)

A l'hora de desenvolupar una pàgina web (o qualsevol altre projecte) en Python, no és recomanable instal·lar nous paquets al mateix lloc que el sistema operatiu, ja que podrien interferir en el funcionament d'altres programes. El més recomanable és crear un entorn (virtual) on instal·lar tot el què faci falta per fer la web. Això no només és molt útil a l'hora de crear pàgines web en Python, sinó que pot servir per qualsevol programa que vulgueu instal·lar, sense que interfereixi en les llibreries del sistema. Igual que en els casos anteriors, podeu comprovar si està instal·lat escrivint:

$> virtualenv --version
1.11.4

Una vegada més, per instal·lar el virtualenv,  només cal seguir les instruccions de la seva pàgina web. De tota manera, si ja heu instal·lat el pip, hauríeu de poder instal·lar el virtualenv, amb els permisos adequats (de root), escrivint:

$> pip install virtualenv

Un cop instal·lat el virtualenv, cal activar-lo (sense necessitat de ser root). Per això, cal anar al directori on vulgueu instal·lar els paquets i escriure:

$> virtualenv env

Tots els paquets que vulgueu instal·lar, s'instal·laran dins d'aquest directori. El nom pot ser el que vosaltres vulgueu, però aquí li he dit env per seguir l'exemple de la seva web. Un cop definit l'entorn virtual, cal engegar-lo mitjançant:

$> source env/bin/activate

5. Django CMS

Tot i que hi ha moltes llibreries en Python per fer pàgines web, aquesta està feta amb Django CMS. Com el seu nom indica, aquesta aplicació està basada en Django. Django és un dels entorns més utilitzats per fer pàgines web en Python. Django CMS és un sistema de gestió de continguts (un CMS, de l'anglès Content Management System) per Django. Un sistema de gestió de continguts proporciona diversos mecanismes per editar pàgines web i Django CMS (des de la versió 3.0) ho fa d'una manera extraordinàriament senzilla: només cal clicar sobre el contingut per editar-lo. A més, per instal·lar Django CMS, només cal anar al directori on heu creat l'entorn virtual i escriure:

$(env)> pip install djangocms-installer

Igual que en el cas del virtualenv, he fet servir el pip per instal·lar el Django CMS. La diferència important és que ara ho he fet des de l'entorn virtual que he creat, indicat amb el (env). Això té tres avantatges importants:

  • Ja no necessiteu cap permís especial per instal·lar els programes, perquè tot s'instal·la allà on li heu dit vosaltres.
  • Podeu saber què hi ha instal·lat en tot moment, perquè ho heu instal·lat vosaltres. Si no recordeu què hi ha instal·lat, la comanda pip freeze us dirà tot els paquets de Python instal·lats, i la seva versió.
  • Sabeu que res del què instal·leu interferirà en els altres programes (de Python) que estigueu fent servir.

De tota manera, encara no s'ha instal·lat el Django CMS, només s'ha instal·lat un programa que s'encarregarà de fer la instal·lació i la configuració. Per fer la instal·lació, cal escriure:

$(env)> djangocms -p . my-site

Amb aquesta comanda, esteu dient que voleu crear una pàgina web amb Django CMS en el directori actual (-p .) que es digui my-site (per seguir l'exemple de la seva web). A continuació, us començarà a demanar diverses coses. Cal dir que l'instal·lador de Django CMS està evolucionant força ràpid, amb el què podria ser que les preguntes no siguin exactament iguals que les que es mostren a continuació:

Database configuration (in URL format) [default sqlite://localhost/project.db]:

El primer que us demana és la base de dades que voleu fer servir. Si us heu saltat el pas 3, aquí no cal posar-hi res. Si, per contra, heu creat una base de dades MySQL, el què cal introduir és:

Database configuration (in URL format) [default sqlite://localhost/project.db]:
mysql://example-user:my-password@localhost:3306/example

Com podeu veure, aquí cal especificar-li el tipus de base de dades (mysql), l'usuari creat anteriorment (example-user), la contrasenya (my-password), el servidor (localhost) i la base de dades (example). A continuació, demanarà altres coses que podeu deixar als valors per defecte:

django CMS version (choices: 2.4, 3.0, stable, develop) [default stable]:
Django version (choices: 1.4, 1.5, 1.6, stable) [default stable]:
Activate Django I18N / L10N setting (choices: yes, no) [default yes]:
Install and configure reversion support (choices: yes, no) [default yes]:
Languages to enable. Option can be provided multiple times, or as a comma 
separated list: en,ca

En aquest cas, li estic dient que vull una web en anglès i en català. Òbviament, aquí podeu posar-hi qualsevol dels 70 idiomes que Django CMS suporta. A continuació, demanarà un parell de coses referents al format de les dates:

Optional default time zone [default America/Chicago]: UTC
Activate Django timezone support (choices: yes, no) [default yes]: no

Aquí he fet servir UTC com a zona horària i he desactivat el suport de Django per les zones horàries. Això farà que totes les hores introduïdes a la web estiguin en format UTC. Aquest és el format recomanable si esteu fent servir MySQL. El motiu és que Django necessita la funcionalitat mysql_tzinfo_to_sql per poder fer servir zones horàries amb MySQL, cosa que no és immediata d'activar, tot i que també es pot fer, si voleu.

La instal·lació continua amb uns quants valors que podem deixar per defecte i acaba preguntant l'usuari, una adreça de correu i la contrasenya que voldreu fer servir per entrar al gestor de continguts de Django CMS:

Activate CMS permission management (choices: yes, no) [default yes]:
Use Twitter Bootstrap Theme (choices: yes, no) [default no]:
Load a starting page with examples after installation (choices: yes, no) 
[default no]:
Username (leave blank to use 'admin'):
Email address: email@example.net
Password: admin-password
Password (again): admin-password

Amb aquests passos, ja heu instal·lat el Django CMS i, per tant, ja podeu activar el nou lloc web. En el cas d'un allotjament compartit, el procediment és diferent, però si ho heu instal·lat tot en un ordinador en local, només cal fer:

$(env)> python manage.py runserver

A continuació, si obriu el vostre navegador i aneu a l'adreça http://localhost:8000, podreu veure la pàgina per defecte de Django CMS. Per començar a editar contingut, només cal que aneu a l'adreça http://localhost:8000/?edit. Després d'introduir l'usuari i la contrasenya que acabeu de definir (admin i admin-password, en aquest cas), podreu començar a fer servir totes les funcionalitats de Django CMS.

És important remarcar, abans d'acabar, que el procediment descrit aquí només explica com instal·lar els programes necessaris per començar a fer una pàgina web amb Python. Com heu pogut comprovar, de moment ni tant sols ha calgut programar res en Python. El gran potencial de Django és que podeu incorporar a la vostra web gairebé qualsevol aplicació de Python d'una manera relativament senzilla. A més, moltes de les aplicacions més comuns a les pàgines web (com, per exemple, un bloc) ja estan fetes, amb el què tot es redueix a instal·lar-les (a través del pip) i a adaptar-les al vostre estil.

Tornar