如何使用Django处理重复的表单提交?

时间:2017-10-27 15:13:52

标签: python django design-patterns

如何处理第二次提交重复请求如果用户在第一次提交由于服务器延迟而未完成时尝试刷新页面。

  • 客户端禁用提交按钮以避免多次提交。
  • 并在表单提交重定向到成功视图后处理发布/重定向/获取模式

我相信两者都处理得很好。

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 个答案:

答案 0 :(得分:0)

可以通过python实现,但它会非常复杂。有一种更简单的方法来实现你的目标。只需用户JQuery并在用户点击它后禁用该按钮。这样用户就无法点击两次。

在模板中,您有视图表单,添加以下脚本(根据您的需要调整):

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

使用JQuery,您还可以将按钮名称转换为微调器,因此看起来它正在加载。我使用FontAwesome(http://fontawesome.io/icon/spinner/)。