from formencode.htmlform import HTMLForm from formencode import validators, compound, schema from WebKit.Page import Page page_style = """ Tell me about yourself

Tell me about yourself

A FormEncode example

%s """ form_template = '''
Your name:

Your age:

Your favorite color:
Red
Blue
Black
Green

''' class FormSchema(schema.Schema): name = validators.String(not_empty=True) age = validators.Int(min=13, max=99) color = compound.All(validators.Set(), validators.OneOf(['red', 'blue', 'black', 'green'])) filter_extra_fields = True allow_extra_fields = True class index(Page): def awake(self, trans): Page.awake(self, trans) self.form = HTMLForm(form_template, FormSchema) self.rendered_form = None def actions(self): return ['save'] def save(self): results, errors = self.form.validate( self.request().fields(), self) if results is not None: self.doAction(results) else: print "Errors:", errors self.rendered_form = self.form.render( defaults=self.request().fields(), errors=errors) self.writeHTML() def writeContent(self): if self.rendered_form is None: self.rendered_form = self.form.render( defaults=self.getDefaults()) self.write(page_style % self.rendered_form) def getDefaults(self): return dict( age='enter your age', color=['blue']) def preAction(self, trans): pass postAction = preAction