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

Reply via email to