Nach geraumer Zeit gibt es heute mal wieder ein paar Neuigkeiten auf kuerbis.org.
Die erste betrifft den Footer, dieser ist ein wenig verändert worden, zeigt nun an prominenter Stelle einen Hinweis, dass diese Site auf Basis von Django erstellt wurde.
Die zweite ist weniger offensichtlich und betrifft den internen User-Bereich. Dort ist es nun möglich, eigene Profilbilder hochzuladen. Dies allein ist zugegebenermassen wenig aufregend. Doch da Profilbilder eine feste Grösse besitzen sollen, ist es wünschenswert, die Bilder nach dem Upload bearbeiten zu können. Dafür gibt es z.B. die JavaScript Image Cropper UI, die mit Hilfe der JavaScript-Libraries Prototype und Scriptaculous eine simple, web-basierte Oberfläche für diese Funktionalität bereitstellt. Diese Demo-Anwendung, welche auf PHP und ImageMagick basiert, hat bei der Implementierung ebenfalls geholfen.
Wir sind jedoch in der Welt von Django und Python, insofern kommt statt ImageMagick die Python Imaging Libraryzum Einsatz. Die Adaption ist – wie nicht anders zu erwarten – simpel und elegant.
Dennoch wird das Zuschneiden des Bildes bis auf weiteres die einzige Stelle sein, an der Scriptaculous hier Verwendung findet, denn an anderer Stelle setzt diese Site auf die wundervolle JavaScript-Library jQuery. Zum Beispiel beim Löschen des Profilbildes – kleine, aber nette Effekte sowie Ajax zur Kommunikation mit dem Server.
Der gesamte Quellcode steht selbstverständlich als Open-Source zur Verfügung, bislang bin ich zwar noch nicht dazu gekommen, das Subversion-Repository zu veröffentlichen, aber für Fragen stehe ich jederzeit zur Verfügung.
Update: Da haben sich wohl doch noch ein paar Fehler eingeschlichen, man sollte nicht zuviele Updates auf einmal machen…
Update 2: Die Fehler sind nun behoben. Eines der Probleme lag in der Verwendung der newforms-Library von Django, die sich noch in stetem Wandel befindet. So wurde aus clean_data nun cleaned_data. Nicht unlogisch, und sogar dokumentiert, aber bis gestern hatte ich noch nicht auf die aktuelle Version updated, so dass dies beim Testen natürlich nicht auffiel.
Ein zweites Problem lag schon etwas tiefer. Es handelte sich um fehlerhafte Lookups, infolge derer nicht diejenigen Objekte zurückgeliefert wurden, die man eigentlich erwartete. Auch dieser Fehler ist nun behoben.