On Tue, 16 Apr 2013, andrea crotti wrote:
This is not really scalable, and we want to make the whole thing more generic.So ideally there could be a DSL (YAML or something else) that we could define to then generate the forms, but the problem is that I'm quite sure that this DSL would soon become too complex and inadeguate, so I'm not sure if it's worth since noone should write forms by hands anyway. Between the things that we should be able to do there are: - dependent fields - validation (both server and client side, better if client-side auto-generated) - following DRY as much as possible Any suggestions of possible designs or things I can look at?
I would highly recommend a look at Flask, and Flask-WTF in particular. It's fairly easy to write forms, and with only a bit of setup you can end out with some fairly generic systems.
I don't think that by default it does any client-side validation generation, but as the HTML for the forms are completely generated, extending the form and adding validation logic to the output wouldn't be too difficult.
Example: # form.py from flask.ext.wtf import Form, TextField, Required class MyBasicForm(Form): some_text = TextField("Put some text here:", validators=[Required()]) # View/HTML {% extends 'base.html' %} {{ form.some_text.label() }}{{ form.some_text(size=40) }} # Server code @app.route("/basic_form", methods=['GET', 'POST']) def basic(): form = MyBasicForm() if form.validate_on_submit(): do_the_needful(form.some_text.data) return redirect(url_for('main')) return render_template('basic_form.html', form=form) Obviously a really basic example. Check out Flask here: http://flask.pocoo.org/ And Flask WTF here: http://pythonhosted.org/Flask-WTF/ HTH, Wayne
-- http://mail.python.org/mailman/listinfo/python-list