呈现相同的视图并防止重新提交表单确认

时间:2019-06-15 13:41:05

标签: javascript jquery django django-views

我有一个简单的索引页面,该表单带有表单以获取人们的一些反馈,提交此表单后,我的视图仅加载同一页面。这会在Chrome浏览器中(可能也在其他浏览器中)发生“重新提交表单”确认。我不想创建第二个带有确认的页面,我只是在提交表单后在页面顶部显示一个小警报来确认。

那么我可以解决这个问题吗?我看到的大多数答案都说必须有重定向功能,但是在我的情况下,重定向不带上下文,因此我需要上下文知道表单已提交并显示警报以通知用户。我的看法:

def index(request):
    if request.POST:
        showAlert = True
        # Collect form data
        name = request.POST.get('name')
        to_email = 'example@email.com'
        message = 'message: {}\nname: {}\nemail: {}'.format(
                request.POST.get('message'),
                name,
                request.POST.get('email')
            )
        subject = 'feedback'
        try:
            email = EmailMessage(
                subject,
                message,
                django_settings.EMAIL_HOST_USER,
                [to_email]
            )
            email.send(fail_silently=False)
        except BadHeaderError:
            return HttpResponse('Invalid header found.')
        return render(request, 'project/index.html', {'showAlert': showAlert})
    else:
        return render(request, 'project/index.html')

这是表格:

<form id="frm_feedback" role="form" method="POST">
  {% csrf_token %}
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Your name" name="name">
    </div>
    <div class="form-group">
        <input type="email" class="form-control" placeholder="Your email" name="email">
    </div>
    <div class="form-group">
        <textarea cols="30" rows="10" class="form-control" placeholder="Your message" name="message"></textarea>
    </div>
    <button type="submit" class="btn btn-primary btn-lg">Submit</button>
</form>

因此,如果有人提交该表单,它将发送帖子,而我的视图索引方法将从该表单收集所有数据并向我发送电子邮件,然后使用“ {'showAlert':showAlert}'和其他上下文呈现同一页面,并我可以使用JavaScript显示警报。

之后,如果我尝试重新加载“确认表单重新提交”,则会发生浏览器警报,并且我无法重新加载页面。

0 个答案:

没有答案