2010-12-10 13 views
1

Django의 샘플을 보았는데 괜찮은 에러 핸들링을 볼 수 있습니다. 그러나 장고에서 폼 유효성 검사 오류를 처리하는 일반적인 패턴이 아직 더 좋은 방법인지 알고 싶습니다. 이것은 내가 here를 볼 수있는 샘플입니다 : 특히Django에서 좋은 양식 유효성 검사를 작성하는 방법은 무엇입니까?

def contact(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = ContactForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      # Process the data in form.cleaned_data 
      # ... 
      return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = ContactForm() # An unbound form 

    return render_to_response('contact.html', { 
     'form': form, 
    }) 

, 궁금 해서요 :

  1. 어떻게에서보기 "/ 감사 /"형식이 확인되었다 있는지 확인? 양식의 성공적인 검증을 다음보기로 전달하는 일반적인 방법이 있습니까? 또는 요청 세션에서 플래그를 설정하는 것과 같이 수동으로 수행해야합니까?

  2. 폼이 유효하지 않고 제출시 오류와 함께 페이지가 표시되는 경우, 사용자가 브라우저를 새로 고치면 다시 POST 데이터를 원할 때 사용자에게 묻지 않는 방식으로이 코드를 작성할 수 있습니까?

편집 : 사용자가 어떤 형태의 유효성을 검사없이 열리는 실수로 수동 '/ 감사 /'URL을 입력하거나 역사의 페이지를 앞뒤로가는 같은 경우를 참조하고 # 1에 관해서. (우리는 여전히 "감사"페이지를 보여줄 것인가? 아니면 우리가 왜 감사의 견해에 있는지 재확인 할 필요가있다).

답변

1
  1. 뷰 양식이 유효한 경우에만 호출 할 수 있기 때문에 양식이 검증되어 있는지 확인 할 수 있습니다 ...

  2. 페이지가 POST 요청을 통해 생성되는 경우, 브라우저는 항상 묻습니다 당신이 새로 고침 때 ... 나는 이것을 피할 수있는 유일한 방법은 다른 페이지로 리디렉션 될 것이라고 생각합니다!

+0

1. 사용자가 수동으로 '/ thanks /'URL을 입력하거나 기록 페이지를 통해 앞뒤로 가고 우연히 양식 유효성 검사없이 열지 않는 경우를 묻습니다. (우리는 여전히 "감사합니다"페이지를 보여줄 것인가? 아니면 우리가 왜 감사의 견해에있는 이유인지 재확인해야 함) – aligf

+0

2. 동일한보기로 리디렉션 할 수 있지만 여전히 게시물 요청이 있는지 궁금합니다. 어쩌면 요청 세션을 사용해야합니까? – aligf

+0

리디렉션하는 경우'request'에 저장된 데이터가 손실되므로 세션을 사용해야합니다.아마 당신은 다른 뷰를 생성 할 필요가 없을 것입니다. 폼 뷰에서 템플릿을 렌더링하고 거기에 리턴 할 수도 있습니다 ... 필요 이상으로 조심해야합니다. 양식 데이터가 데이터베이스에 두 번 저장되는 것을 피하고 사용자가 실제로 "파괴"할 수없는 유사한 작업을 수행 할 수 있습니다. –

1

어떻게 할 수있는보기 "/ 감사 /"형식이 확인되었다 있는지 확인?

form.is_valid()은 필드 또는 필요한 경우 - 모든 조합, 코너 케이스 등을 철저히 검사해야합니다. 기본적으로 그렇습니다. 보기 을 알고 있으므로 양식이 렌더링되면 유효합니다. 세션에 중복 정보를 포함 할 필요가 없습니다.

폼이 유효하지 않고 제출시 오류와 함께 페이지가 표시되는 경우, 사용자가 브라우저를 새로 고치면 POST 데이터를 다시 보내려는 사용자에게 묻지 않는 방식으로이 코드를 작성할 수있는 방법 ?

요점은 무엇인지 알 수 없습니다. 양식에 오류가있어 사용자가 오류를 수정하거나 떠날 수 있습니다. 양식 재전송을 요구하지 않는 페이지를 렌더링하려면 유효한 경우와 마찬가지로 리디렉션을 사용할 수 있습니다. 오류 마크 업은이 경우 수동으로 수행해야합니다.

+0

# 1은 내 질문 편집을 참조하십시오. 원래보기에서 리디렉션에 관해서는 오류 마크 업을 수행 할 수 있도록 세션에 POST 요청 값을 저장해야합니까? HttpResponseRedirect를 사용하여 POST 요청을 모방하는 일반적인 방법이 있습니까? – aligf

관련 문제