We used to do form.accepts(...), later Bruno added form.validate(...) and form.process(...). Now we extended this to work with both FORMs and SQLFORMs so instead of:
form = SQLFORM(...) if form.accepts(request,session): # success elif form.errors: # failure else: # nothing happened now you can do form = SQLFORM(...).process() if form.accepted: # success elif form.errors: # failure else: # nothing happened process takes the same arguments as accepts but does not need to be passed request.vars and session. It also takes additional parameters: - onsuccess (lambda form: ...) - onfailure (lambda form:...) - message_onsuccess - message_onfailure - next (url to redirect in case of success) Give it a try. This may replace form.accepts(...) as my favorite API. It makes the code more compact.

