[Python] Programmazione web

Manlio Perillo manlio_perillo a libero.it
Sab 26 Apr 2008 23:39:49 CEST


Lawrence Oluyede ha scritto:
> [...]
> Vero, ma uno dei motivi per cui si introduce un cookie per
> l'autenticazione è anche per fare logout.
> 
>>     Peccato per le implementazioni nei browsers correnti non ottimali,
>>     ma comunque si può usare, l'unico aspetto negativo è che
>>     gli utenti si devono loggare usando la finestra di dialogo del
>>     browser (e Safari ha anche un fastidioso bug che ne riduce ancora
>>     di più l'usabilità).
> 
> Hai elencato le altre motivazioni per cui HTTP Digest è un po' snobbato
> 

Ma resta comunque utilizzabile.

>>     E' possibile fare un login tramite form HTML usando Ajax, ma non
>>     tutti i browser lo supportano.
> 
> Appunto, inoltre devi garantire un fallback
> 

Ma, appunto si può farne a meno.

>>     Il logout invece lo si fa senza troppi problemi.
> 
> Tipo? Se ti riferisci all'usare dei trick con JS e Ajax beh, siamo
> daccapo sulla questione del fallback.
> 

Con HTTP Digest hai a disposizione due campi, nonce ed opaque che puoi 
gestire come stato lato client.

Basta gestirli al meglio per riuscire a gestire il logout (ovviamente il 
client ti continua a mandare le credenziali, ma lato server puoi 
verificare se è stato richiesto il logout ed agire di conseguenza - 
questa tecnica non l'ho vista da nessun altra parte, quindi non sono 
sicuro che non sia esente da problemi).

>>  Una su tutte: quasi tutto lo stato è mantenuto in variabili globali ed è
>>  strettamente legato al resto del framework.
> 
> Eh eh non mi pare. In Pylons sì che è così "in quasi tutto". Persino
> gli oggetti request e response sono globali ad un modulo
> 
>>  Questo significa che devi fare i salti mortali se ad esempio vuoi usare
>>  il sistema di templating di Django in altre applicazioni;
> 
> Non mi pare che Django sia stato pensato per essere usato da altre
> parti. 

Appunto questo è il problema.
Se lo fosse stato forse l'API sarebbe stata leggermente migliore.

> Puoi usare un altro sistema di templating in Django. La sua
> forza sta nel non obbligarti ad usare qualsiasi cosa, non nell'essere
> totalmente scomponibile (tra l'altro è parzialmente vero perché parti
> di Django, come l'ORM si posson usare al di fuori. Idem la parte di
> routing delle URL
> 
>>  infine significa anche che non puoi far girare due applicazioni nello
>>  stesso interprete.
> 
> Questo è un problema del 99% dei framework eh
> 
>>  Un'altra cosa che non mi piace è l'idea "don't repeat youself" portata
>>  agli estremi, in cui "mischi" insieme concetti che magari è meglio
>>  tenere separati.
> 
> Quì non siamo d'accordo, a me sembra, almeno a livello di API che sia
> uno dei più puliti
>


Mi riferivo al fatto che, ad esempio TextField nel Model indica *sia* 
che il tipo di dato da usare nel database è di tipo testo, *sia* che il 
controllo nel form è una textarea.

In generale questo non è un problema, e ti aiuta ad evitare di scrivere 
una 20-ina di caratteri di codice.


Ma metti ad esempio che io ho uno schema di un database già creato e che 
voglia crearmi il model Django.

Ignorando i limiti del model di Django (solo chiave primarie semplici) 
come credi dovrebbe essere gestito un campo SQL TEXT?

Mica puoi metterti ad indovinare se debba essere usato un <input 
type="text"> o <textarea>, chiaramente questa è una informazione che 
devi fornire *a parte*, e, a quanto ho capito - magari sbaglio - con 
Django non è possibile.


Ma effettivamente vedo che basta scrivere un newform e si risolve tutto.

Questo non toglie, comunque, che fino a qualche tempo fa c'era questo 
limite (per non parlare della non gestione di Unicode).

>>  Ad esempio nella definizione del modello mischi un pò di tutto: in un
>>  solo colpo per ciascun dato definisci sia il tipo di dato, sia il tipo
>>  di controller (ossia come il dato deve essere gestito nel form).
> 
> Non ti seguo. Io non ho mai mischiato form e model. 

Vedi sopra, colpa mia che ero rimasto ad un API vecchia.
Buono a sapersi.

> Se ti riferisci a
> form_from_model, beh è uno shortcut che può essere utile quando ci sia
> una corrispondenza tra come le informazioni sono rappresentate e
> memorizzate. Ma il fatto che sia una funzione a sé stante ci fa
> decisamente capire che i due siano indipendenti
> 
>>  Per non parlare poi delle "istruzioni" per l'interfaccia di admin, che
>>  IMHO non dovrebbero proprio stare dentro il modello.
> 
> Concordo, infatti son state tolte nella branch newforms-admin che
> finirà nel trunk. Es:
> 
> class Book(models.Model):
>     title = models.CharField(max_length=100)
>     author = models.ForeignKey(Author)
> 
> class BookOptions(admin.ModelAdmin):
>     list_display = ('title', 'author')
>     ordering = ('title',)
> 
> admin.site.register(Book, BookOptions)
> 
> Un model e una classe che gestice l'admin, se ti serve.
> 


Ottimo, quindi finalmente hanno risolto un altra delle cose che non mi 
piaceva.

>>  Ok, tutto questo ti fa scrivere meno codice, ma limita anche quello che
>>  puoi fare; francamente preferisco scrivere un pò di codice in più.
>>  Non commento l'ORM, perchè non è strettamente necessario usarlo;
>>  ho visto comunque applicazioni che usano l'ORM come fosse su un database
>>  in memoria e non in un database relazionale, magari su un server separato.
> 
> Io le uniche limitazioni che ho trovato nella mia breve Django-vita
> erano proprio nell'ORM. Il resto mi piace e con le dovute limature
> Django non farà altro che crescere.
> 

Si, questo lo credo anche io.



Ciao  Manlio Perillo


Maggiori informazioni sulla lista Python