Turbogears 2 - проверка форм на один и тот же URL

У меня есть контроллер для страницы контактов, подобный следующему:

@expose('project.templates.contacts')
def contact(self, **kw):
    return dict( form=contact_form )

После отправки форма проверяется с использованием следующего метода контроллера:

@validate(form=contact_form, error_handler=contact)
@expose()
def processContact(self, **kw):
    # Do some processing on the contact form
    redirect('contact')

Эту установку рекомендуют многие онлайн-учебники (например, http://turbogears.org/2.0/docs/main/FormBasics.html).

Моя проблема заключается в URL-адресе, который отображается, когда контактная форма отправляется с неверными данными, а @validate вызывает метод error_handler.

I.e.

  1. «http://domain/contact» — пользователь переходит на страницу контактов, заполняет форму и нажимает «Отправить».
  2. "http://domain/contact" - если в форме нет ошибок, пользователь успешно перенаправлен на страницу контактов.
  3. «http://domain/processContact» — если в форме есть ошибки, вызывается функция контакта, но перенаправление с открытой «страницы» processContact отсутствует, поэтому URL-адрес остается прежним.

Я ищу способ (правильный способ?), чтобы пользователь не видел "http://domain/processContact". В идеале пользователь должен видеть только "http://domain/contact".


person ttran    schedule 24.08.2011    source источник


Ответы (2)


[это не ответ, а скорее комментарий, но из-за проблем с репутацией мне не разрешено добавлять комментарии] Ваше описание проблемы показалось мне немного расплывчатым. Насколько я знаю, пользователь не увидит «http://domain/processContact», так как в его представлении нет ссылки. Другими словами, из ваших кодов я понимаю, что: 1- в случае ошибки в форме пользователь будет перенаправлен на страницу контактов, где вы получите доступ к введенным данным 2- в случае успеха пользователь будет перенаправлен на новая страница контактов

Если я ошибаюсь, пожалуйста, уточните вашу проблему немного больше.

person narengi    schedule 23.09.2011

Установите в качестве действия формы саму страницу contact, добавьте к ней @validate, но не предоставляйте error_handler. Если вы опустите его, вместо вызова error_handler процесс продолжится, и вы просто найдете свои ошибки в tmpl_context.form_errors.

Затем внутри вашего контроллера вы должны обрабатывать три случая:

  1. tg.request.method — GET -> визуализировать форму
  2. tg.request.method — это POST, а tmpl_contet.form_errors не пусто -> визуализировать форму
  3. tg.request.method - это POST, а не tmpl_contet.form_errors -> процесс отправки + перенаправление
person amol    schedule 08.02.2013