eisfuchsLabor

Hallo, Freunde! Kennt Ihr mich noch?

Ist noch gar nicht so lange her, da, wir erinnern uns, hatte ich eine "muss gut funktionieren, gut aussehen und möglichst bald passieren"-Problematik angeschnitten und der erste (1.) Versuch war (natürlich) ein Reinfall. Aber! ich gebe natürlich jetzt nicht auf und schreibe einen zweiten Eintrag. Und heute geht das natürlich nicht ohne gute Musik (ist natürlich gelogen, dafür müsste ich mir Kopfhörer anziehen, und ich bin viel zu faul gerade). Darum kommen wir nun ohne großen Tammtamm (außer, Ihr habt Euch gerade Kopfhörer geschnappt und lasst Euch nebenbei noch ganz heftig anschreien) zum zweiten (2.) Versuch, meinen Schatz (und mich) zufrieden zu stellen.

Für heute habe ich mir django CMS rausgesucht. django CMS basiert auf django (hence the name), und django wurde in Python geschrieben, und ich persönlich finde Python wesentlich weniger schlimm als Ruby (wobei Ruby nicht annähernd so schlimm ist wie PHP, aber da werde ich eh nicht müde, das zu erwähnen). Python kenne ich ja schon ziemlich gut und mit django wollte ich schon immer mal was machen, wobei in diesem Fall eigentlich mehr im Vordergrund steht, möglichst wenig zu machen. Effizienz. Oh, und wo wir gerade von Python reden, guckt mal, was @paniq mit Python so macht!

Bevor wir loslegen können, müssen wir, weil meine virtuelle Maschine wieder auf dem Sicherungspunkt "Sommerfrische" steht, erst mal Python installieren. Da wir für django CMS auch virtualenv brauchen (was sowieso immer eine gute Idee ist), installieren wir einfach das Paket python-virtualenv und lassen debian den Rest über die Abhängigkeiten installieren. Easy.

$ sudo apt-get install python-virtualenv

(Ja, Ihr habt mich erwischt. Ist ja doch eine neue Installation. Vorher hatte ich kein sudo. Aber diesmal hab ich mir wirklich einen Sicherungspunkt erstellt. Ich schwör!) So. virtualenv hilft uns, Python-Pakete für Projekte und Projekte allein zu installieren. Wir können also je Projekt verschiedene Versionen von Paketen installieren, falls die Abhängigkeiten halt dahingehend sind. Das ist nie verkehrt.

$ pip --version
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ virtualenv --version
1.7.1.2

Naja, nah genug dran. Installieren wir den django-CMS-Installer!

$ mkdir django
$ cd django/
/django$ virtualenv env
New python executable in env/bin/python
Installing distribute...done.
Installing pip...done.
/django$ source env/bin/activate
(env)/django$ pip install djangocms-installer
Downloading/unpacking djangocms-installer

Wo das jetzt erledigt ist, können wir unser eigentliches Projekt mit dem neu installierten Tool anlegen.

(env)/django$ mkdir cms-test
(env)/django$ cd cms-test/
(env)/django/cms-test$ djangocms -p . cmstest

Der Installer fragt dann einfach ein paar Dinge ab, wie z.B. Datenbankverbindungen und so weiter.

Database configuration (in URL format) [default sqlite://localhost/project.db]:
django CMS version (choices: 2.4, 3.0, stable, develop) [default stable]:
Django version (choices: 1.4, 1.5, 1.6, 1.7, 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. Only language codes supported by Django can be used here: de,en
Optional default time zone [default America/Chicago]: Europe/Berlin
Activate Django timezone support (choices: yes, no) [default yes]:
Activate CMS permission management (choices: yes, no) [default yes]:
Use Twitter Bootstrap Theme (choices: yes, no) [default no]: no
Use custom template set [default no]:
Load a starting page with examples after installation. Choose "no" if you use a custom template set. (choices: yes, no) [default no]: yes

Puh. Bei Twitter Bootstrap wär' ich fast panisch aus dem Zimmer gerannt. Zum Glück nicht Standard, aber man kann ja nie wissen! Ich nehme doch mal stark an, dass ich die Templates im Nachhinein auch noch ändern oder welche hinzufügen kann, daher wähle ich für die erste Installation einfach mal aus, dass ich keine eigenen Templates habe. Das wird sicher interessanter, wenn ich die Templates im Voraus schon gebaut hätte. Hab ich aber nicht, weil ich so faul bin.

Außerdem bin ich ein Idiot, die Installation schlägt beim Installieren von Pillow fehl, einem Paket, mit dem man Bilder be- und verarbeiten kann, weil wir die Entwickler-Pakete von Python nicht haben. Außerdem fehlen uns die ganzen Bibliotheken für Formatunterstützung, ohne die wir allerhöchstens PNG-Dateien öffnen und speichern können.

$ sudo apt-get install python-dev python-setuptools
$ sudo apt-get install libfreetype6-dev libjpeg8-dev libopenjpeg-dev libtiff4-dev libwebp-dev zlib1g-dev
$ pip install Pillow

(Dann kommt ganz viel Junk.)

--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
--- LIBTIFF support available
--- FREETYPE2 support available
*** LITTLECMS2 support not available
--- WEBP support available
*** WEBPMUX support not available
--------------------------------------------------------------------

Ja, damit kann ich leben. Jetzt lassen wir die Installation noch mal laufen, und dieses Mal fragt uns die Installation auch nach einem Super-Benutzer und dessen Passwort. Wenn das erledigt ist, kann das installierte Projekt gestartet werden.

(env)/django/cms-test$ python manage.py runserver

Der Server horcht aber momentan nur auf localhost. Für das spätere Deployment ist das auch ganz sinnvoll, weil wir ja einfach eine Port-Umleitung einrichten können. Später irgendwann. In unserem Fall kommen wir nicht ran, weil die Anwendung in einer virtuellen Maschine mit fieser Netzwerkbrücke läuft. Zum Glück kann man das leicht umgehen:

(env)/django/cms-test$ python manage.py runserver 0.0.0.0:8000

Bäm!

Jawoll! Ich probiere jetzt auch einfach mal aus, mich einzuloggen, indem ich an die URL /admin anhänge.

Läuft.

Das funktioniert auch genau so, wie ich mir das vorgestellt habe, obwohl der erste Eindruck dieser Installation schon ein bisschen anders ist als in dem Präsentations-Video. Sei's drum. Es hat eine Administrations-Oberfläche! Und jetzt kommt die Überraschung: Gehe ich dort nun hin und wähle die Start-Seite aus, werde ich nicht in eine trockene Liste mit [Zeug] geschmissen, sondern (und jetzt kommt der Hammer:) kann die Seite direkt bearbeiten!

AHHHHHHHHHH!

Und dann dies:

OHHHHHHHHHH!

Okay, eins noch, bevor wir diesen kurzen Test beenden: Ich möchte, dass der Text auf dieser Seite Pink ist. Das kann ich leider nicht über den Admin-Bereich machen, aber bestimmt gibt's dafür irgendwo einen Ordner.

/django/cms-test$ ls cmstest/templates/ -la
total 24
drwxr-xr-x 2 eiszfuchs eiszfuchs 4096 Jan 25 10:46 .
drwxr-xr-x 4 eiszfuchs eiszfuchs 4096 Jan 25 10:54 ..
-rw-r--r-- 1 eiszfuchs eiszfuchs  653 Jan 25 10:46 base.html
-rw-r--r-- 1 eiszfuchs eiszfuchs  186 Jan 25 10:46 fullwidth.html
-rw-r--r-- 1 eiszfuchs eiszfuchs  333 Jan 25 10:46 sidebar_left.html
-rw-r--r-- 1 eiszfuchs eiszfuchs  333 Jan 25 10:46 sidebar_right.html

Ist doch top! Ich bearbeite einfach mal eben die Datei base.html, die sieht mir so aus, als täte sie, was ich bearbeiten muss.

Wahnsinn. Alles, was man braucht. Python. Direktbearbeitung. Unterstützung für mehrsprachige Seiten. Pink.

Der größte Aufwand wird natürlich jetzt sein, die Templates richtig zu bauen und vor allem django-CMS-fertig aufzubauen und die Seite komplett richtig einzustellen, aber das System, die Arbeit, die ich mir abnehmen möchte, wird dadurch auf jeden Fall abgenommen. Für einen ersten Geschmack definitiv ein Erfolg.