On Mon, 21 Jun 2004 17:02:15 -0500 Kirk Strauser <kirk@daycos.com> wrote:
I need to do some minimal validation on a few forms. The built-in typechecking (http://www.zope.org/Members/Zen/howto/FormVariableTypes) does about 99% of what I need, with the exception of outputting useful error messages.
I've looked at some of the various form-processing add-ons but all of them see very "heavy" when what I mainly want to do is ensure that the user remembered to fill in their last name, and if not, tell them that they need to enter it and try again. Seriously, that's about the sophistication level I'm targeting.
Any suggestions?
OK -- this may not be popular -- throw away the builtin typechecking. Do it yourself, it is not hard, at all. index_html, for me, is always a script python. It might look like: request=context.REQUEST if not request.has_key('next_state') return main_menu_pt(context, request) ns=request['next_state'] if ns=='Enter Name': return name_form_pt(context, request) elif ns=='Save Name': err=container.check_name_form_ps(context, request) if err: return name_form_pt(context, request, error_message=err) # save the name, my example is sql container.save_name_sql(request) return main_menu_pt(context, request) Now, check_name_from_ps looks like: request=context.REQUEST err='' nm=request['name'].strip() request.set('name', nm) if not nm: err+='<p>You must enter a name.</p>' # name can't be entered twice res=container.select_name_sql(name=nm) if len(res)>0: err+='<p>The same name cannot be entered twice.</p>' ... return err Finally, name_form_pt looks something like <html> ... <div tal:content="options/error_message|nothing"></div> <form method="post" action="container/absolute_url"> Name: <input type="text" size="25" tal:attributes="value request/name|nothing"> ... <input type="submit" name="next_state" value="Save Name"> </form> ... </html> Very flexible, pretty simple, and index_html is strictly boilerplate. Either present a form; or check a form, if error found, present the original form with errors noted and most recent content, or if no error found, do the side-effects and present the next suitable from. Jim Penny
-- Kirk Strauser The Day Companies
_______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman-20/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman-20/listinfo/zope-announce http://mail.zope.org/mailman-20/listinfo/zope-dev )