The redirect() function is just a shortcut for raising an HTTP exception with a status code of 303 (this is mentioned in the documentation <http://web2py.com/books/default/chapter/29/04/the-core#HTTP-and-redirect>). This allows a redirect to immediately abandon the current request and return an HTTP response.
Didn't realize that the try/except clause was interfering with the redirection. Makes perfect sense - made adjustments accordingly, and it solved the problem. Thank you! On Sunday, October 26, 2014 11:54:26 AM UTC-5, Anthony wrote: > > The redirect() function is just a shortcut for raising an HTTP exception > with a status code of 303 (this is mentioned in the documentation > <http://web2py.com/books/default/chapter/29/04/the-core#HTTP-and-redirect>). > This allows a redirect to immediately abandon the current request and > return an HTTP response. > > In your first example, the validate() method does a redirect, so the code > execution stops at that point, and you never get to the rest of the code in > your function. In your second example, you have placed the redirect() call > inside a "try" block, and then you don't do anything with the exception in > the "except" block, so the HTTP exception never gets to finish executing > (you simply print it but do not re-raise it). If you want to catch (and > ignore) exceptions among a block of code that also includes a redirect, > then you have to check for the HTTP exception and re-raise it: > > try: > ... > redirect(...) > except Exception as e: > if isinstance(e, HTTP): > raise e > else: > print e > > Anthony > > On Sunday, October 26, 2014 11:09:24 AM UTC-4, Spokes wrote: >> >> Dabbled with it some more, and it seems that the problem exists not only >> when using the super class to generate the form. I've tried a couple of >> functions that generate the form within the controller. The first variant >> is this (passing the 'next' directive to validate()): >> >> def create_form(): >> form = SQLFORM.factory(db.t_mytable) >> >> if form.validate(next = URL('my_controller', 'next_url')): >> try: >> print 'form.vars:', form.vars >> record_id = MyTable.insert_record(form.vars) >> session['new_record_id'] = record_id >> >> except Exception as e: >> print e >> >> return form >> >> Upon form submission, the app bypasses the code within the validate() >> conditional, and redirects successfully to the url passed to validate(). >> >> In the second variant, I'm trying to manually redirect after the code >> within validate() is completed: >> >> def create_form(): >> form = SQLFORM.factory(db.t_mytable) >> >> if form.validate(): >> >> try: >> print 'form.vars:', form.vars >> record_id = MyTable.insert_record(form.vars) >> session['new_record_id'] = record_id >> >> redirect(URL('my_controller', 'next_url') >> except Exception as e: >> print e >> >> return form >> >> >> Upon form submission, the code within the scope of the validate() >> conditional is executed, a '303 SEE OTHER' exception is thrown, and the app >> does not redirect to the function specified in URL(). >> >> Any thoughts as to what could be happening, or ideas on how to debug it? >> > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

