2011-08-24 2 views
0

I는 유사한 문의 페이지를위한 컨트롤러가 다음 제출시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)에서 옹호하는 설정입니다.

내 문제는 연락처 양식이 잘못된 데이터와 함께 제출되고 @validate가 error_handler 메소드를 호출 할 때 노출되는 URL입니다.

e.e.

  1. "에 http : // 도메인/접촉는"- 사용자가 연락처 페이지로 이동하여 양식을 채우고
  2. 제출을 클릭합니다 "에 http : // 도메인/접촉을"- 경우가 양식에 오류가 없으면 사용자가 성공적으로 연락처 페이지로 리디렉션됩니다.
  3. "http : // domain/processContact"- 양식에 오류가있는 경우 연락처 함수가 호출되었지만 노출 된 processContact 'page'의 리디렉션이 없으므로 URL은 동일하게 유지됩니다.

나는 방법을 찾고 있어요 "에 http : // 도메인/processContact"를 참조 할 필요가 사용자를 방지하기 위해 (올바른 방법?). 이상적으로 사용자는 "http : // domain/contact"만 볼 수 있습니다.

답변

0

[이 질문에 대한 답변은 없지만 더 많은 코멘트가 있지만 평판 문제는 덧글을 달 수 없습니다.] 문제에 대한 설명이 다소 모호한 것 같습니다. 내가 아는 한, 사용자는 "http : // domain/processContact"를 노출하지 않으므로 링크가 노출되지 않습니다. 즉, 귀하의 코드에서 이해할 수있는 것은 다음과 같습니다. 1- 폼에 오류가있는 경우 사용자는 입력 된 내용에 액세스하는 연락처 페이지로 리디렉션됩니다. 2- 성공한 경우 사용자는 새 연락처 페이지로 리디렉션 됨

Id 잘못된 것으로 알고 있습니다. 문제를 조금 더 명확하게하십시오. 폼 작업으로

+0

안녕하십니까, 사용자는 양식 동작이므로 "http : // domain/processContact"를 볼 수 있습니다. – ttran

0

설정은 접촉 페이지 자체는 그것에 @validate를 추가하지만error_handler을 제공하지 않습니다. 이를 생략하면 error_handler를 호출하는 대신 플로우가 진행되고 tmpl_context.form_errors에서 오류를 찾을 수 있습니다. 빈>

  • tg.request.method는 POST와 tmpl_contet.form_errors있는 양식을 렌더링하지 않습니다 -

    1. tg.request.method가 GET된다

      그런 다음 컨트롤러 내부의 세 가지 경우를 처리해야 -> 양식 렌더링

    2. tg.request.method는 POST이고 tmpl_contet는 없습니다.form_errors -> 프로세스 제출 + 리디렉션