Pyramid – step 3 [deform]

I form sono la parte più vitale, importante e necessaria di un sito, al giorno d’oggi. E fanno schifo, almeno quanto i dns.

Attualmente pare che la miglior soluzione sia quella di utilizzare deform.

Va prima di tutto installato e attivato, l’installazione avviene facilmente con easy_install, per attivarlo basta aggiungere ad __init__.py

config.add_static_view('static', 'deform:static')

Ho creato un file chiamato schema.py con il seguente contenuto:

  1. import colander
  2.  
  3. class Event(colander.MappingSchema):
  4.     title = colander.SchemaNode(colander.String())
  5.     slug = colander.SchemaNode(colander.String())
  6.     abstract = colander.SchemaNode(colander.String())
  7.     idb = colander.SchemaNode(colander.String())
  8.     place = colander.SchemaNode(colander.String()) 
  9.     datetime = colander.SchemaNode(colander.DateTime())
  10.  
  11. class Events(colander.SequenceSchema):
  12.     event = Event()
  13.  
  14. class Schema(colander.MappingSchema):
  15.     events = Events()
  16.  
  17. schema = Schema()

Il tutto dovrebbe servire per creare il form, grossomodo rispecchia punto a punto gli elementi dell’oggetto Event in models.py.
Dentro views.py ho creato una vista edit fatta così:

  1. @view_config(route_name=‘edit’, renderer=‘templates/edit.jinja2’)
  2. def edit(request):
  3.     schema = Schema()
  4.     dbsession = DBSession()
  5.     myform = Form(schema, buttons=(‘submit’,))
  6.     if ‘submit’ in request.POST:
  7.         controls = request.POST.items()
  8.         try:
  9.             appstruct = myform.validate(controls)
  10.         except ValidationFailure, e:
  11.             return {‘form’:e.render(), ‘values’: False}
  12.         # Process the valid form data, do some work
  13.         values = {
  14.             “name”: appstruct[‘name’],
  15.             “shoe_size”: appstruct[‘shoe_size’],
  16.         }
  17.         return {“form”: myform.render(), “values”: values}
  18.     # We are a GET not a POST
  19.     return {“form”: myform.render(), “values”: None}

Ma poiché non c’è la MINIMA compatibilità con jinja2 devo ricambiare motore di rendering.
Pyramid mi inizia a stare pesantemente sul cazzo.

Leave a Reply