Google App Engine

Siirretään sovelluksemme Googlen App Engine -ympäristöön.

Malliratkaisu

Malliratkaisun lähdekoodi

Malliratkaisun template

Google Datastore

Googlen Datastore on NoSQL-dokumenttitietokanta. Datastorea voi käyttää melkein samaan tapaan kuin relaatiotietokantoja.

Limitations: The Datastore enforces some restrictions on queries. Violating these will cause it to raise exceptions. For example, combining too many filters, using inequalities for multiple properties, or combining an inequality with a sort order on a different property are all currently disallowed. Also filters referencing multiple properties sometimes require secondary indexes to be configured.

Unsupported: The Datastore does not directly support substring matches, case-insensitive matches, or so-called full-text search. There are ways to implement case-insensitive matches and even full-text search using computed properties.

Liitoksia ei voi käyttää Datastoren kyselyissä.

Entity Models

Ensimmäiseksi tarvitsee luoda malliluokat, jotka kuvaavat tietokantaan tallennettavaa tietoa. Vrt. SQL-tietokannan CREATE TABLE -lauseet.

Mallipohjassa luodaan ja alustetaan ohjaus 3:ssa käytetty reseptitietokanta. Katso main.py-tiedostosta mallikoodi. Kokeile suorittaa populate-sivu, joka tallentaa datastoreen reseptitietokannan sisällön. Huom. Jos suoritat sivun useampaan kertaan, niin myös sisältö tallentuu useamman kerran.

SDK Consolen Datastore Viewerillä voit katsoa mitä datastoreen tallentuu. Voit myös muokata datastoren sisältöä. Huom! Kaikki testaaminen on syytä tehdä lokaalissa ympäristössä App Engine Launcherilla. Jos muokkaat datastorea suoraan Googlen pilvipalvelussa, niin jokainen muutos- ja lukuoperaatio maksaa. Kts. Always Free usage limits.

Tutustu seuraaviin dokumentteihin:

Kyselyt

WTForms-Appengine

Jos sovellus kaatuu hämärään KeyPropertyField-virheeseen niin kyseessä voi olla tunnettu bugi, joka pitäisi olla jo korjattu valmiissa pohjassa olevaan kirjastoon, mutta jos itse päivität kirjastoja niin saatat saada saman bugin takaisin.

Kirjautuminen Googlen tunnuksella

Appengine-sovellukseen on helppo lisätä kirjautuminen Googletunnuksella: User authentication in Python

Lisää sovellukseesi seuraava sivu. Kokeile ladata sivu sekä lokaalilla palvelimelle, että pilvessä julkaistulla versiolla. Lokaali versio ei käytä oikeaa Googlen autentikointia vaan emuloi sitä.

# Kirjaudutaan sisään käyttäen googlen autentikointia
@app.route('/login')
def login():
        user = users.get_current_user()
        if user:
            nickname = user.nickname()
            logout_url = users.create_logout_url('/')
            greeting = 'Welcome, {}! (<a href="{}">sign out</a>)'.format(
                nickname, logout_url)
        else:
            login_url = users.create_login_url('/')
            greeting = '<a href="{}">Sign in</a>'.format(login_url)
        return '<html><body>{}</body></html>'.format(greeting)

Jos haluat tallentaa kirjautuneen käyttäjän uniikin tunnisteen esim. tietokantaan niin sen saat user_id()-metodilla.

tunniste = user.user_id()

Kirjautuneen käyttäjän sähköpostiosoitteen saat email()-metodilla. Älä kuitenkaan käytä sähköpostiosoitetta käyttäjän uniikkina tunnisteena, koska osoite voi muuttua.

Kts. google.appengine.api.users module.

Voit lisätä autentikoinnin app.yaml-tiedoston avulla joillekin halutuille sivuille tai kaikille sivulle. Lue app.yaml handlers login. Tee app.yaml-tiedostoon seuraava muutos:

- url: /.*
    script: main.app
    login: required

Kokeile joudutko nyt kirjautumaan ennen reseptisivulle pääsemistä. Kokeile selaimella, jossa et ole jo valmiiksi kirjautuneena googleen tai käytä private-tilassa olevaa selainikkunaa.

web2py

Jos halut kokeilla web2py-frameworkia niin lue vanha ohjaustehtävä

Käyttäjien kommentit

Kommentoi Lisää kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
https://appro.mit.jyu.fi/tiea2080/ohjaus/ohjaus6/
© 2021-03-09 09:49:30
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta