2011-01-27 5 views
9

Nelle applicazioni reali, se utilizzo un framework di moduli, inevitabilmente finisco per combatterlo ad un certo punto.Schema di progettazione più pulito per la visualizzazione dei dati del modulo e degli errori di convalida?

Sono interessato ai modelli di best practice per la creazione di moduli in un sito Web. Il riferimento alle implementazioni in qualsiasi lingua sarebbe un bonus (di solito lavoro in Python). Sono particolarmente interessato al problema della creazione/visualizzazione dei moduli all'utente finale.

Ecco come vedo il soggetto. La maggior parte delle parti del flusso di lavoro del modulo può essere gestita con componenti relativamente leggeri che posso estrarre da framework come formencode e formish. Per "gran parte delle parti" intendo la decodifica inoltrata in una struttura dati sensata (ad esempio campi ripetuti nel modulo dovrebbero diventare elenchi in Python); marshalling i valori nei tipi che vogliamo (ad esempio, un campo "età" dovrebbe diventare un numero intero); e convalida i valori (ad esempio "età non deve essere vuota").

Il pezzo che finisco per combattere è creare e visualizzare i moduli stessi. Molti framework (ad esempio FormAlchemy) accoppiano strettamente i loro schemi, convalide e modelli a un qualche tipo di schema di generazione di widget di moduli, che non mi piace.

Le attività coinvolte nella realizzazione di un modulo sono:

  • Fare widget dinamici (ad esempio un elenco di selezione con i valori da un database)
  • Looping oltre fieldsets ripetizione (ad esempio un elenco di nome, coppie di età che rappresentano ciascuno una persona)
  • Incorporare valori esistenti nei campi di modulo (da una struttura dati)
  • Visualizzazione errori di convalida prossimi ai campi modulo o nella parte superiore della pagina

Le opzioni che vedo per fare questo sono:

  • generare, sulla base di widget che sono definite nello schema (ad esempio Django)
  • post-processo forme, mediante l'applicazione di una struttura di dati contenente errori e valori per un modello HTML (ad es htmlfill)
  • accettano che per tutti, ma i casi più semplici, si può anche cominciare dall'inizio da codifica la logica (loop, visualizzazione errore, ecc) manualmente in ciascuno dei vostri modelli di modulo

ci sono altri modelli per la gestione del problema? Quali sono i pro ed i contro di ognuno?

I quadri (Python) Ho guardato/aveva sottolineato finora sono: flatland, formencode, FormAlchemy, formish, WTForms, Django forme, web2py, deform, FormConvert e web.py

Aggiornamento : Non ho davvero avuto molto tempo per rispondere alla domanda sulle migliori pratiche per la creazione di moduli, ma ho preso la decisione con il mio progetto corrente di deformare/scolapasta, che è un modo sensato di gestire la serializzazione, ecc. più importante è ben documentato e ben collaudato. Eviterò la generazione di moduli per tutti, tranne le forme più semplici.

+0

Grazie per avermi fatto questa domanda come hai fatto tu. I miei requisiti sono quasi identici ai tuoi. In base al tuo aggiornamento, hai abbandonato la generazione di moduli. Ma per quanto riguarda il popolamento di forme con valori, sei riuscito a trovare una buona soluzione? Ad esempio, stai usando htmlfill per questo scopo? Grazie – adowds

risposta

3

Si può provare django. Ha il modulo forms, che fornisce molti meccanismi utili per i moduli web.

+0

Come già detto, conosco già Django: mi interessano gli schemi di progettazione (in particolare per la parte che riempie il modulo del problema), piuttosto che i grandi framework. Inoltre, l'implementazione delle forme di Django è strettamente correlata all'intero framework. – seb

1

C'è anche la classe Form web.py che potresti trovare interessante. Ci sono esempi nel suo cookbook.

+0

Non avevo guardato a web.py, grazie - ma sembra essere ancora un altro framework di generazione di form. Cosa lo renderebbe diverso/migliore di, diciamo, formencode? – seb

1

Un pannello con diversi autori della libreria form è stato presentato a PyCon 2010, che potrebbero essere rilevanti per la tua domanda:

http://www.pycon.tv/video/184/

+0

Grazie, questa è una discussione utile – seb

+0

Questo link sembra essere rotto. –

+0

Grazie, @ Matthew, il vecchio collegamento era effettivamente rotto; Ho trovato il video da qualche altra parte e ho aggiornato il link. Grazie! –

0

hai visto Bruno django-floppyforms? Non risponde alla tua domanda, ma vale la pena essere consapevole del fatto che è stata fatta.

1

Ho recentemente utilizzato flatland per gestire un modulo complesso e l'ho trovato molto flessibile. Non esiste una libreria di widget, ma ha un potente generatore/filtro HTML e, come nella documentazione, come pointed out, è semplice scrivere i propri widget. Non lasciatevi ingannare dalla versione "0.0.2", la libreria è abbastanza matura e stabile.

Problemi correlati