Предоставление того же представления и предотвращение подтверждения повторной отправки формы - PullRequest
0 голосов
/ 15 июня 2019

У меня есть простая индексная страница с формой для получения отзывов от людей, и после отправки этой формы мое представление просто загружает ту же страницу. Это происходит при подтверждении повторной отправки формы в браузере 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.

После этого, если я пытаюсь перезагрузить браузер, появляется сообщение «Подтвердить повторную отправку», и я больше не могу перезагрузить страницу.

...