Neue Applikationen aus dem Google-Land

Teil 2: Google App Engine

  1. Google App Engine
  2. Teil 2: Google App Engine

Als Beispiel wollen wir eine simple Anwendung zum Eingeben und Anzeigen von Blogeinträgen erstellen. Ein Eintrag besteht aus Überschrift, Inhalt, Kategorie, Bewertung und Eintragsdatum. Die Python- Klasse BlogEntry dazu sieht folgendermaßen aus:

Hier werden bereits die unterschiedlichen Property-Klassen bei der Definition der Attribute verwendet. Nur Überschrift und Inhalt sind dabei Pflichtfelder, und das Eintragsdatum wird durch die Option auto_now_add=True automatisch eingetragen. StringProperty kann dabei nur bis zu 500 Byte speichern (Python Strings oder Unicode Strings), für größere Textmengen sollte man wie bei content die Klasse TextProperty verwenden. Werte, die als TextProperty definiert sind, können allerdings bei Abfragen nicht als Filter oder Sortierkriterium verwendet werden.

class BlogEntry(db.Model):
headline = db.StringProperty
(required=True)
content = db.TextProperty
(required=True)
category = db.StringProperty()
rating = db.IntegerProperty()
date = db.DateTimeProperty
(auto_now_add=True)

Neben den hier verwendeten Property-Klassen bietet die Datastore API noch eine ganze Reihe von weiteren Datentypen (Float, Blob, GeoPt, etc.). Insgesamt stehen 18 Klassen zur Auswahl.

Um jetzt eine Instanz von BlogEntry anzulegen und im Datastore zu speichern, genügen folgende Befehle:

entry = BlogEntry
( headline=
"Erster Blogeintrag",
content=
"Das ist nur ein
Testtext." )
entry.put();

Datastore ansehen und ändern

Fügen Sie jetzt die BlogEntry-Klasse in die Datei hallowelt.py ein (vor MainPage), und kopieren Sie die Zeilen zum Erzeugen der Instanz hinter die Ausgabe von Hallowelt. Führen Sie im Browser ein Reload durch. Jetzt können Sie im Admin-Interface Ihrer Anwendung (http://localhost:8080/_ah/admin) die Werte des Datastore ansehen und ändern. Wählen Sie dazu den Data-store Viewer, geben Sie als Entity Kind den Klassennamen BlogEntry ein (Groß-Kleinschreibung beachten), und klicken Sie auf List Entity. Durch Klick auf den Schlüssel (key) eines Eintrags können Sie die Werte anzeigen und ändern. Achtung: Im Test unter Windows XP hatte der Datastore-Editor Probleme mit Unicode-Zeichen und brach bei Einträgen, die Umlaute enthielten mit Fehler ab. In der Admin-Oberfläche der Live-Umgebung auf der Google-Website existiert dieses Problem allerdings nicht - zudem ist der Data Viewer dort wesentlich komfortabler ausgefallen.

Blog-Anwendung erstellen

Um jetzt aus unserem Programmgerüst eine Blog-Anwendung zu erstellen, sind nur noch wenige Zeilen Code notwendig. Als Erstes definieren wir in der Klasse Main Page eine Abfrage zur Anzeige der aktuellsten zehn Einträge. Die API stellt dafür die Klasse GqlQuery zur Verfügung, mit welcher sich Abfragen in der SQL-ähnlichen Sprache GQL definieren lassen:

Webdesign: Google App Engine

© Archiv

Die komfortable Ansicht der Logfiles dient vor allem zum Aufspüren von Fehlern und Warnungen.

Darunter geben wir mit self.response.out.write() ein HTML-Formular aus, mit dem ein neuer Eintrag eingegeben werden kann. Besonderheit dabei ist die Angabe der URL /enter im action- Attribut des Form-Tags:

entries = db.GqlQuery("SELECT * FROM
BlogEntry ORDER BY date DESC LIMIT 10")
In einer einfachen for-Schleife
geben wir die Ergebnisse aus:
for entry in entries:
self.response.out.write
(entry.date.strftime("%d.%m.%Y %H:%M") )
self.response.out.write
('<br><b>%s</b>' % entry.headline)
self.response.out.write
('<p style="width:400px;">%s</p>'% cgi.escape(entry.content))

Die URL /enter fügen wir jetzt zur URL/Requesthandler-Liste beim Erzeugen der Instanz von webapp.WSGIApplication hinzu:

<form action="/enter" method="post"><div>Headline:<br><input name=
"headline" type="text"></div>
...

Jetzt müssen wir noch die neue Klasse New-Entrydefinieren, die für die URL /enter aufgerufen wird. Dort erzeugen wir den neuen BlogEntry, lesen die Formularvariablen aus (headline, content), und speichern den Eintrag mit put() im Datastore ab. Nun erfolgt eine Umleitung auf die Hauptseite (/):

application = webapp.
WSGIApplication([ ('/', MainPage), ('/enter', NewEntry)], debug=True)

Testen Sie die neue Anwendung. Sie werden feststellen, dass der Test-Webserver eine neue Datei index.yaml in Ihrem Anwendungsverzeichnis erstellt hat. Diese Datei enthält die Indexdefinitionen zum Datastore, die automatisch auf Basis der GQL-Abfrage erstellt wurden. Sie können diese Datei selbst erweitern und anpassen.

class NewEntry(webapp.
RequestHandler):
def post(self):
greeting = BlogEntry(
headline=self.request.get
('headline'),
content=self.request.get
('content'))
greeting.put()
self.redirect('/')

Anwendung hochladen

Um Ihre Anwendung jetzt auf den Google-Server hochzuladen, ändern Sie in der Datei app.yaml den Namen der application auf den Namen, den Sie bei der GAE-Anmeldung für Ihre erste Anwendung eingegeben hatten. Geben Sie dann in der Konsole ein:

Das Skript fragt Sie daraufhin nach Ihrer (Google-)E-Mail-Adresse und Ihrem Passwort, und lädt anschließend die Dateien hoch. Mit der URL http://application-name.appspot.com/ (application- name mit Ihrem Anwendungsnamen ersetzen) rufen Sie die Anwendung auf. Wenn Sie sich unter appengine. google.com einloggen, können Sie Ihre Anwendung administrieren, Zugriffsstatistiken einsehen, und den Datastore verwalten.

appcfg.py update hallowelt

Benutzer einloggen

Ein großer Pluspunkt des Webframeworks ist die Unterstützung von Google-Log-ins und die damit verbundene einfache Personalisierung der Anwendung (auch wenn Google damit sicher im Sinn hat, noch mehr Benutzerdaten zu sammeln). Mit

ruft man die aktuellen Benutzerdaten eines angemeldeten Benutzers ab. Ist noch keine Anmeldung geschehen, verlinkt man einfach auf die Log-in-Seite, ansonsten kann man die Daten mit user.nickname und user.email abrufen.:

user = users.get_current_user()

Diese Zeilen reichen, um nur noch eingeloggte Benutzer auf Ihre Applikation zu lassen. Mit einer weiteren Zeile lässt sich abfragen, ob der angemeldete Benutzer der Administrator ist, um beispielsweise sicherzustellen, dass neue Einträge nur von diesem User eingetragen werden dürfen:

if user:
self.
response.out.write('Hallo, ' + user.nickname())
else:
self.redirect
(users.create_login_url(self.request.uri))
if users.is_current_user_admin():
... Ausgabe des Formulars zur Eingabe
eines neuen Eintrags ...

Weitere Anwendungen

Einige Themen der GAE konnten in diesem Artikel leider aus Platzgründen nicht erklärt werden. Etwa die Ausgabe von statischen Dateien (Bilder, CSS, etc.), der Memcache zum Speichern von Applikationsweiten Daten, die URL Fetch API zum Übertragen von Daten über http, die Mail API zum Senden von e-Mail, die Image API zum Verändern von Bildern, und die erweiterten Fähigkeiten des Datastore mit Keys, Indices und Referenzen. Insgesamt bietet Google damit eine leistungsfähige und vor allem einfach anzuwendende Programmierumgebung.

Sie müssen übrigens nicht den Webframework von Google verwenden. Andere in Python geschriebene Frameworks lassen sich zusammen mit der Anwendung hochladen und einsetzen - das SDK wird beispielsweise schon zusammen mit Django 0.96 ausgeliefert. Weiterhin gibt es im Web-framework von Google einen leistungsfähigen Template-Mechanismus, mit dem sich Webseiten einfacher vom Programmcode trennen lassen.

Mehr zum Thema

Whatsapp auf PC
Mit oder ohne Download

Mit Whatsapp Web oder der Whatsapp Desktop-App nutzen Sie den Messenger bequem am PC. Wir erklären Download, Installation und Einrichtung.
Whatsapp Alternativen
Für Android, iPhone, iPad & Co.

Es gibt keine Whatsapp-Alternative? Quatsch! Diese 10 Messenger-Apps für Android, iOS und Windows Phone sind der perfekte Ersatz.
Kalender synchronisiert auf iPad
Zeit-Management

Kalender auf dem Smartphone, PC und im Web synchronisieren - mit unseren 9 Tipps schaffen Sie genau das. Verpassen Sie keinen Termin mehr!
Cloud-Speicher
Meta-Cloud

Diese Meta-Dienste und Cloud-Tools fassen kostenlosen Cloud-Speicher von Google, Dropbox und Co. zusammen - oft besser als das Original.
Dropbox, Google Drive & Co.: Steckdose mit Logos
Verschlüsselung, Explorer-Zugriff & Co.

Wir haben Tipps für Add-ons und Apps für Google Drive und Dropbox. Damit kommen Verschlüsselung, Zugriff im Windows-Explorer und mehr.