簡體   English   中英

刷新頁面后取消POST

[英]Cancel the POST when the page is refreshed

我的問題是:當用戶刷新表單時,將發送Form的數據。

我有一個帶有POST請求的Form

用戶寫下他的名字,郵件和消息。 如果郵件正確,則發送郵件。

在我看來,如果Form有效,則將消息添加到模型消息中。

之后,我禁用“發送”按鈕。 但是,如果用戶刷新頁面,則會調用我的視圖,並在模型中添加另一行。

我想在用戶刷新頁面時阻止POST。

我的觀點:

def contact(request):

    form = MessageForm(request.POST or None)

    if form.is_valid(): 
        name = form.cleaned_data['name']
        message = form.cleaned_data['message']
        mail = form.cleaned_data['mail']

        new_message = Message()
        new_message.name = name
        new_message.message = message
        new_message.mail = mail
        new_message.save()

        envoi = True

    return render(request, 'vautmieux/contact.html', locals())

我的網址:

path('contact/', views.contact, name='contact'),

我的HTML:

<form action="{% url "contact" %}" method="post">
    {% csrf_token %}
        <div class="row">
           <div class="col-md-6">
              {{ form.name }}
              {{ form.mail }}
           </div>
           <div class="col-md-6" >
              {{ form.message }}
           </div>
           <button id="sendMessageButton" type="submit">ENVOYER LE MESSAGE !</button>
        </div>
    {% if envoi %}Votre message a bien été envoyé !{% endif %}
</form>

這是人們實現Post / Redirect / Get模式[wiki]的主要原因。 如果POST請求成功 ,則應將重定向返回到URL。 結果,瀏覽器將執行GET,並且如果瀏覽器隨后執行刷新,則它將再次進行GET。

def contact(request):
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid(): 
            form.save()
            return redirect()
    else:
        form = MessageForm()
    return render(request, 'vautmieux/contact.html', {'form': form})

在這里, 'some-message-successful-view'需要替換為在發送消息成功時觸發的視圖名稱。 該視圖可以與此處定義的視圖相同。 我建議使用Django的消息框架 [Django-doc]向用戶發送消息,表明該消息已成功提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM