piątek, 24 kwietnia 2009

Google App Engine :: Klasa User

Google App Engine sprytnie rozwiązuje kwestie użytkowników, także przy tworzeniu aplikacji możemy łatwo wykorzystać klasę user z google api ( from google.appengine.api import users). Wystarczy, że użytkownik posiada konto w google, a my w łatwy sposób możemy 'wyciągnąć': nickname, user_id oraz jego adres mailowy.
Służą do tego metody - odpowiednio:
  1. nickname()
  2. user_id()
  3. email()
Co więcej dla naszego użytkownika przewidziany jest odpowiedni typ w bazie danych
- db.UserProperty()

A teraz zakładamy scenariusz: jak użytkownik nie jest zalogowany to przekierowywujemy go na stronę logowania, a jak jest zalogowany to wyświetlamy jego nickname oraz dajemy możliwość wylogowania się.


user = users.get_current_user()
if user:
self.response.out.write(user.nickname() + """ |
<a href="users.create_logout_url(self.request.uri)" >
Sign out</a>""")
else:
self.redirect(users.create_login_url(self.request.uri))


jeszcze możemy sprawdzić czy użytkownik ma uprawnienia administratora:
is_current_user_admin() - zwraca True jeśli tak.

Źródło (więcej na): http://code.google.com/appengine/docs/python/gettingstarted/

czwartek, 23 kwietnia 2009

Google App Engine - test możliwości

Google App Engine to świetne narzędzie do tworzenie dynamicznych stron oraz aplikacji webowych.
Ale to nie wszystko, bo to również darmowy hosting tych aplikacji + baza danych i wiele innych pożytecznych funkcji włącznie z panelem administracyjnym.

Co o bazie danych i języku Gql?

Niby obiektowe, ale z możliwością zadawania zapytań w języku gql - googlowa wersja sql'a :)
Co więcej zapytanie do bazy zwraca kolekcję obiektów.

Wpis w bazie jest obiektem stworzonej przez nas klasy, po kontakcie z ZODB czy Gadfly nie powinno to już nikogo dziwić.

Prosty przykład:

class BazaObiektow(db.Model):
author = db.UserProperty()
title
= db.StringProperty()
body
= db.TextProperty()

obiekty = db.GqlQuery("SELECT * FROM BazaObiektow")
# oczywiście można dodać jeszcze WHERE :)
# GqlQuery Class
for obiekt in obiekty:
#iterujemy po obiektach
self.response.out.write(str(obiekt.author) + '...wypisujemy co chcemy')


A jak się pisze kontroler i widok:

też fajnie, jest nawet system template'ów, co do google.appengine.api i cgi jest, jak narazie, troche słabo udokumentowane - trzeba się dużo naszukać, żeby znaleść informacje jak na przykład zapisać ciastka. Chociaż można się tego domyśleć :)

Dla zabawy napisałem prostą aplikacyjke do operacji na obrazach: zmiana wielkości( resize), obracanie o kąt( wielokrotność 90 stopni), odbicie symetryczne i poprawa kontrastu - a wszystko w oparciu o google.appengine.api - klasa images.

Można testować tutaj: My Images

aha, aplikacja jest po angielsku, ale łatwo się pokumać jakie funkcje do czego służą.

No i to by było na tyle...

Podsumowując - google app engine wywiera pozytywne wrażenia :)