Steven Holmes wrote:
> Hi,
>
> @validate supports separating form rendering and form post processing
into distinct methods. This is convenient, but has a nasty flaw: It
requires two separate URLs, a form display URL and a URL to handle the
post. When a form post fails to validate, the form is re-displayed,
but at the post URL instead of the original form display URL. I find
this inconsistent and broken.
>
> Here is a little example:
>
> class AccountController(BaseController):
> def create_form(self):
> return render('create_account')
>
> @validate(schema=CreateAccountSchema(), form='create_form') def
create(self):
> return 'Account Created!'
>
> To view the form we go to /account/create_form, then when we submit we
are taken to /account/create, where the form is re-displayed if there
were errors. Two different URLs for the same form. This is
> unnecessarily exposing a (confusing) implementation detail to the user.
>
> Changing @validate so that it will always internally redirect to
create_form if there is no form post would make things more
> consistent. The form could then be viewed at /account/create and also
re-displayed with errors are /account/create, while the nice
> separation between form display and form processing is maintained.
>
> I don't know what effect this change would have on backwards
> compatibility, but it can be made with a trivial (two lines or so)
change to @validate. (I can do a quick patch if anybody's interested).
With a little help of pylons.controllers.dispatch_on you can achieve what
you want:
@dispatch_on(POST="do_create")
def create(self):
render("my form")
@validate(schema="something", form="create")
def do_create(self):
process(self.form_seult)
the form shown at create() can "submit to itself" so the external API only
sees the /create url while you avoid branching inside the method to do two
different jobs which is cleaner, IMHO.
Alberto
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pylons-discuss" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---