quixote

Quixote è un framework python .Ho deciso di scrivere questa guida dato che su internet di guide approfondite su quixote in italiano non ce ne sono.Dio framework python ormai ce ne sono tanti,alcuni piuttosto elaborati e potenti (Zope, Twisted, Django),altri più minimali non per questo meno interessanti tra cui appunto Quixote.

Per scrivere applicazioni web con Quixote bisogna conoscere Python,in quanto un framework non è un CMS ,i quali offrono di scrivere gran parte dell applicazione in maniera visuale(WordPress,Joomla, Drupal,in php e Skeletonz e Zope-Plone in python).Un framework ci offre un numero di funzioni che semplificano delle operazioni che altrimenti richiederebbero più impegno e codice per essere create.Dicevo bisogna cvonoscere Python ,che non starò qui a trattare (forse lo farò un altra volta),mi limiterò a dire che Python ha una particolarità che lo distingue da altri linguaggi;esso non contiene parentesi per dividere gli statement logici dell’ applicazione ,essi vengono individuati dall’ interprete in base all’ indentazione del codice ,che mentre negli altri linguaggi ,benchè consigliata per dare leggibilità al programma,non è obbligatoria.In python invece se non viene rispettata l’ interprete ritornerà errore.

Questa è la definizione di una classe python:

class new_class(object):

“”” doc string “””

attr1 = “attributo della classe”

def __init__(self, par1):

self.par1 = par1

def my_method(self, par2):

if par2 == 3:

return self.par2

else:

return self.par1

Notare l’ indentazione del codice.E poi importante ricordare che il python è un linguaggio dinamicamente ma fortemente tipizzato;
infatti ATTENZIONE a chi ha un background col php (come me) ,che essendo a debole tipizzazione permette che i numeri siano tarttati come stringhe e viceversa ,tipo se dobbiamo fare delle operazioni con dati numerici che vengono dal campo input text di una form html ,col php non ci sono problemi ,in python bisogna fare un cast di tipo altrimenti lo script ritornerà un errore.

Torniamo a Quixote ;il software necessario¹ (su cui ho realizzato questa guida) è composto da:

Necessario:

  • S.O. linux (Fedora8)
  • Python 2.5
  • Quixote 2.5
  • Apache 2.0

Opzionale (relativo ,se usiamo Apache come web server,a come vogliamo interfacciare la nostra applicazione al web server):

  • Mod_fcgi (modulo fast cgi per Apache ,una sorta di CGI piu performante)
  • Mod_scgi (Purtroppo non sono riuscito a trovarlo quindi… nada!)
  • Mod_cgi (sicuramente gia funzionante di default in Apache)
  • Mod_python (tiene python in cache per esecuzione piu veloce dei programmi)
  • Mod_wsgi (Il mio preferito, portabile ,veloce, sicuro)

Abbiamo poi diversi web server attraverso moduli python (medusa HTTPseserver,)nello stesso quixote(simple_server).Comunque in ambiente di produzione è preferibile usare Apache ,molto più flessibile, se abbiamo un server web che deve servire diverse applicazioni web , in diversi linguaggi,pagine statiche e dinamiche.Se invece si ha solo applicazione python come Quixote potremmo anche pensare di usare web server python.Vedremo più in la.

¹Tenere presente che gran parte del software si puo recuperare dai repostory confidurati sulla vostra distro linux,nel mio caso yum.

Quixote usa una modalità comune in diversi framework (ad es. Django anche se in modo un po diverso) cioè mappare le stringhe che rappresentano gli url a delle funzioni.metodi di classi python che ereditano dal modulo Directory,queste classi vengono poi passati come argomenti al Publisher ritornato dalla funzione handler che lega l’ applicazione al web server,questa funzione la troviamo appunto in mio.py

Ancora bisogna dire che Quixote usa un sistema di template differente da altri framework che seguendo il paradigma MVC si servono di template che permettono di separare la parte logica dell applicazione dai dati e dalla presentazione di questi con appunto i template.

In genere i template sono costituiti da codice html al cui interno sono presenti dei tag speciali (i tag di template appunto) che permettono

come dicevamo su , dividendo la logica dalla presentazione dei dati, ai grafici di lavorare sulla parte grafica dell applicazione senza andare a mettere mani sul codice python, evitando di causare errori nella programmazione (ad es. sfalsando l indentazione del codice ,importantissimo in python).Quixote invece usa un tipo di template poco adatto ai grafici ,infatti essi usa dei semplici file con estensione .ptl ,all interno dei quali vi sono delle speciali funzioni che ritornano in output codice html di cui se i dati provengono dall esterno della funzione viene automaticamente fatto l escaping dei caratteri.

È un tipo di template molto grezzo e minimale che cerca solo di rendere sicuro il codice da eseguire.

Poi I file .ptl sono dei veri e propri moduli python ,infatti possono essere importati nei namespaces locali come

qualsiasi altro file python.

Comunque nulla ci vieta di usare altri template engine come ad es. il piu famoso Cheetah.

Iniziamo creando il file mio.py ed il file di template uno.ptl ,potremmo anche evitare di creare un file di template ,creando la classe derivata da Directory direttamente nel file handler ,classe che poi verra passata come argomento al Publisher .Comunque per esigenze di didattica creiamo un file per i template.

mio.py :

# -*- coding: UTF-8 -*-

# Il rigo sopra serve per la codifica unicode altrimenti potremmo settare il file

# config.py nell installazione di Quixote.Esso deve essere la prima riga del file.

# le linee anteposte dal cancelletto sono commenti

“””

Tutto quello che si trova tra le triple apici (singoli o doppi) si chiama ‘doc string’ essi

sono molto piu di un semplice commento .Ma questo esula dal tutorial ,forse ne parlerò in altra sede.

“””



from quixote import enable_pt
#Importiamo il modulo per i template

from quixote.server.simple_server import run # Se vogliamo eseguire la app. con un server python

from quixote.publish import Publisher # Importiamo il Publisher Per la funzione handler
from quixote.wsgi import QWIP
#Questo (vedremo dopo) ci servirà per interfaccia WSGI al webserver
enable_ptl()
# Abilitiamo i file template PTL
from uno import dirc #
Importiamo la classe che istanzia Directory

“”” Questa sotto è la funzione Handler che lega Publisher a Directory,infatti ritorna Publisher con argomento classe dirc() di tipo Directory

Publisher prende 2 argomenti (ne prende anche altri ma poi vedremo)

1]Istanza della classe dirc() (derivata da Directory)

2]display_exceptions(plain) che ci serve solo in caso di test poiche permette di visualizzar eventuali errori a video.Accetta 2 valori,

‘plain’ in caso di output a video minimale di tipo testo,’html’ nel caso volessimo un output piu dettagliato ,in questo casonecessitiamo

del modulo python cgitb installato.Di default in config.py è settato a NONE,come deve essere in ambiente di produzione.

Dirc() o Directory() non prende argomenti di default ,ma noi gli passiamo 2 stringhe per testare l escaping delle stringhe.

—————————————————

Sotto le variabili var e var1 che saranno passata al costruttore all istanziamento di dirc()

Esse ci servono per testare l escaping dei template  PTL e  funzioni di utilità quixote.

Infatti il contenuto di var e var1 sarà codice eseguibile html, appunto per testare la capacita di escaping

Pensate se ad n campo input di una form qualcuno inserisce del codice eseguibile javascript

oppure ancora peggio ,se con l input utente si costruisce una query sul database.Capite l importanza

di proteggere i dati  che vengono immessi arbitrariamente dagli utenti.


“””

var = ”  <strong style=’ color:#E90204;’>var : dati esterni</strong>”;

var1 = ” <hr /><h5 style=’ color:#E90204;’>var1:secondo arg</h5><hr /> “;

def create_publisher():

return Publisher(dirc(var, var1) ,

display_exceptions=’plain’)

“”” La direttiva sotto ,nota per chi conosce un po Python si attiva nel caso richiamiamo direttamente da shell il file mio.py

questo l’abbiamo specie nel caso usiamo i web server di quixote ‘simple_server’ ad esempio.

Basterà infatti dare il comando : python mio.py.

Nel caso non fosse presente la condizione  if __name__ == ‘__main__':

potevamo comunque avviarla da shell[ad es. sempre con simple_server.py ] facendo

Considerando di trovarci simple_server.py nella stessa directory di mio.py:

[gianluca@localhost quixote]$python simple-server.py  –factory  mio.create_publisher


“””

if __name__ == ‘__main__':

run(create_publisher, host=’nome server web’, port=8080)


Continua….





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>