quixote(parte6)

Passiamo a vedere come funzionano le sessioni.

per spiegare facciamo un esempio con form e sessioni:

facciamo conto di stare all interno della definizione di una classe  che eredita da Directory()

cioè che crea un ramo dell albero di directory dell applicazione.

Siamo all interno del suo metodo test_sess(self)

Spieghiamo prima che Quixote ha la classe session che attraverso il metodo builtin di Quixote

get_session() ci restituisce una sua istanza.Per registrare le sessioni ed amministrarle

abbiamo invece la classe  SessionManager(),anch esso restituito  dal metodo builtin

get_session_manager().

Prima di manipolare le sessioni dobbiamo quindi creare un manager delle sessioni.

possiamo farlo in 2 modi.

1] Il Publisher ritornato dall handler nella funzione create_publisher() nel file mio.py

quello iniziale,accetta anche un argomento di tipo SessionManager().Possiamo usarlo per

avere disponibile gia pronto il manager di sessioni ,cosi quando andiamo a creare una sessione

avremo gia tutto bello e pronto. In pratica:

def create_publisher():

return Publisher(dirc(var, var1) , session_manager=SessionManager(),display_exceptions=’plain’)

Comunque la classe SessionManager() accetta un argomento di tipo sessione,cioe possiamo creare una classe

derivata da session con attributi nuovi da usare nell applicazione.Nell esempio non lo faremo

dato che non è necessario.

Allore nel metodo

test_sess(self):

“””

All inizio sotto il codice sotto andiamo a prendere il sessionmanager creato con

l handler create_publisher. e con il metodo items()  creaiamo la variabile

sessions che consiste in una lista di tuple [(ideentificativo,oggettosessione),(identificativo1,oggetto sessione 1)]

ne contiamo il numero di coppie attraverso len().

Come si vede piu sotto abbiamo una form  renderizzata in html. Essa dopo  l’invio

dei dati alla stessa url (action vuoto)…….

Seguitiamo i commenti del codice INLINE

“””

content = htmltext(‘<h5>sessioni</h5>’)
sessions = get_session_manager().items()
n_sess = len(sessions)

# sotto,se il numero di coppie (ogni coppia corrisponde ad 1 sessione) è > 0

#significa che il SessionManager ha cominciato a registrare.


if n_sess > 0:

#Dicevamo se vi sono sessioni preperiamo per l output la variabile n_sess

# E piu giu prepariamo anche l user registrato nella sessione,questo perchè

#come si vede sotto la sessione la creiamo dopo il login utente.con la possibilità

#di associarvi un username reperibile attraverso ilbuiltin get_user()

content +=htmltext(‘<b> ci sono %d  sessioni </b>’)% n_sess

content +=htmltext(‘<br /><b> l user di sessione : %s</b>’) % get_user()

#Qui sotto invece essendo True il POST  campo input ‘name’ della form(cioè la form is submitted)
if get_field(“name”):


session = get_session()              # creaiamo l oggetto sessione
session.set_user(get_field(“name”))      # gli associamo l utente loggato

#ATTENZIONE CHE PER CREARE LA SESSIONE DOBBIAMO PER FORZA ESEGUIRE ENTRAMBI

#I PASSAGGI session=get_session() E session.set_user(nomesessione)

#ALTRIMENTI NIENTE SESSIONE.

#Riempiamo la variabile content   con   identificativo della sessione
content += htmltext(‘<h5>sessione –> %s</h5>’) % session.id

# con l user associato ad essa  .

#Le 2 linee sotto ci danno entrambi lo stesso risultato ,poichè sia get_user()

#che session.user,entrambi restituiscono l user associato alla sessione ,se c’è.
content += htmltext(‘<p>benvenuto, %s!  grazie per esserti loggato.</p>’) % get_user()
content +=htmltext(‘<h5>session_user –> %s</h5>’) % session.user

content += href(“..”, “go back”, title=’torna indietro’)


else:

#Questa è la form.Come funziona l abbiamo visto nella lezione precedente.


form = Form()
form.add(StringWidget, “name”, title=”nome”, required=True)
form.add_submit(“submit”, “Invia!”, id=’sb’)
form.add_reset(“reset”,”reset”)
form.ERROR_NOTICE='<div>ci sono errori nella form </div>’
form.TOKEN_NOTICE='<div>ci sono errori TOKEN    </div>’


content += htmltext(“%s”)% form.render()

Parte7




Leave a Reply

Your email address will not be published.


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>