Turbogears 2 - проверка форм по одному и тому же URL - PullRequest
0 голосов
/ 24 августа 2011

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

@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.

Т.е.

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

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

Ответы [ 2 ]

0 голосов
/ 08 февраля 2013

Установить в качестве действия формы саму страницу contact , добавить к ней @ validate , но не предоставлять 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 -> процесс отправки + перенаправление
0 голосов
/ 23 сентября 2011

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

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

...