2017-10-27 1 views
2

두 번째 제출 중복 요청을 처리하는 방법 서버 지연으로 인해 첫 번째 제출이 아직 완료되지 않은 경우 사용자가 페이지를 새로 고치려고하는 경우.Django로 중복 양식 제출을 처리하는 방법은 무엇입니까?

  • 송신자가 여러 제출을 피하기 위해 제출 버튼을 비활성화합니다.
  • 및 처리 포스트/리디렉션/형태 후 패턴 성공보기 나는 모두 잘 처리하는 생각

로 리디렉션 제출 가져옵니다.

class SomeView(View): 
    def post(self, request, *args, **kwargs): 
    if form.is_valid() 
     if request_exists(request): 
     # here I can raise the exception also 
     # But How I redirect the customer to sucess page 
     # If 1st submission got success response. 
     else: 
     # here I have called internal api to get/post some data. 
     # user refreshes before this call has completed. 
     ... 
     # once getting respose its ALWAYS redirect to new page 
     return HttpResponseRedirect('/thanks/') 

하지만 어떻게 처리 할 것인가? API 호출로부터 응답이 지연되면. 첫 번째 제출이 완료 될 때까지 연기해야합니다. 그런 다음 사용자를 감사 페이지로 보내야합니다.

+1

해결책은 [여기] (https://stackoverflow.com/a/35083287/4628154)에 설명되어 있습니다. API 호출 시간이 길거나 사용자의보기에있는 작업이 있으면 별도의 오프라인 작업에서이를 트리거하고 기다리는 메시지가있는 상태에서 새 페이지를 최대한 빨리 리디렉션하십시오. – ramganesh

답변

0

파이썬을 통해 가능하지만 매우 복잡합니다. 목표를 달성하는 쉬운 방법이 있습니다. 사용자 JQuery 만 사용하고 사용자가 클릭하면 버튼을 비활성화하십시오. 그렇게하면 사용자는 두 번 클릭 할 수 없습니다. 당신이보기에 대해 양식을 가지고있는 템플릿에서

다음 스크립트 (여러분의 필요에 조정) 추가 :

$(document).ready(function(){ 
    var myButton = $('#my_button_id'); // your button ID here 
    myButton.on('click', function(){ 
     myButton.prop('disabled', true); 
    }); 
}; 

와 jQuery를, 당신은 또한 그래서, 스피너에있는 버튼의 이름을 chagne 수 있습니다 로드 중입니다. 나는 그것을 FontAwesome 사용자 (http://fontawesome.io/icon/spinner/).

+0

네,이게 효과가 있습니다.하지만 여기서 질문은 브라우저 새로 고침에서 중복 제출을 막는 방법입니다. ** JS, ** Post/Reedirect/Get **의 제출 버튼 비활성화 **보기에서 처리됨 – ramganesh

관련 문제