= Form Processing = Diva comes with a simple module supporting the processing of HTML forms. A [RequestHandlers request handler] that does some simple form processing typically looks something like this: {{{ #!python from diva.forms import Form, TextValidator from diva.routing import redirect_to from diva.templating import output, render class LinkForm(Form): username = TextValidator(required=True) url = TextValidator(required=True) title = TextValidator(required=True) @output('submit.html') def submit(request, response): form = LinkForm() if request.method == 'POST': if 'cancel' in request.POST: redirect_to('index') if form.validate(request.POST): # Form is valid, store data int the database link = Link(**form.data) link.store(app.db) redirect_to('info', link.id) return render(errors=form.errors) }}} This simple example already does a couple of things you may not expect: * When the form is redisplayed on `POST` due to validation errors, the form elements will already be populated with the previously entered values. * The form submission is protected against Cross-Site Request Forgery (CSRF) attacks, by adding a form token both as a cookie, and as a hidden form input field. == API Documentation == [[PythonDoc(trunk, diva.forms)]]