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:
- import colander
- class Event(colander.MappingSchema):
- title = colander.SchemaNode(colander.String())
- slug = colander.SchemaNode(colander.String())
- abstract = colander.SchemaNode(colander.String())
- idb = colander.SchemaNode(colander.String())
- place = colander.SchemaNode(colander.String())
- datetime = colander.SchemaNode(colander.DateTime())
- class Events(colander.SequenceSchema):
- event = Event()
- class Schema(colander.MappingSchema):
- events = Events()
- 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ì:
- @view_config(route_name=‘edit’, renderer=‘templates/edit.jinja2’)
- def edit(request):
- schema = Schema()
- dbsession = DBSession()
- myform = Form(schema, buttons=(‘submit’,))
- if ‘submit’ in request.POST:
- controls = request.POST.items()
- try:
- appstruct = myform.validate(controls)
- except ValidationFailure, e:
- return {‘form’:e.render(), ‘values’: False}
- # Process the valid form data, do some work
- values = {
- “name”: appstruct[‘name’],
- “shoe_size”: appstruct[‘shoe_size’],
- }
- return {“form”: myform.render(), “values”: values}
- # We are a GET not a POST
- 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.