Dans cet article on va voir comment éviter avec django (testé avec la 1.11) la page "Confirm Form Resubmission" pour un site web. Cette page blanche ou grisée peut apparaitre après avoir soumis un formulaire, si le visiteur clique sur rafraichir la page ou bien sur le button retour dans son navigateur. Cette caractéristique se justifie pour des raisons de sécurité, surtout si par exemple les champs du formulaire sont utilisés pour modifier la base de données. Cependant, dans certains cas, comme par exemple dans le cas d'un simple formulaire de recherche pour votre site, cela peut-être ennuyeux pour le visiteur et nuire à sa navigation.
Pour éviter la page "Confirm Form Resubmission" il faut impérativement, dans le fichier "views.py", après un formulaire valide (soumis avec la méthode "POST") rediriger, par exemple, avec la fonction HttpResponseRedirect, même si vous redirigez uniquement vers la même vue.
Si on ne veut pas répéter l'ensemble des operations effectuées après un formulaire valide on peut tout simplement sauvegarder les champs du visiteur dans une session. Exemple avec un simple formulaire de recherche pour un site:
models.py
class Search_Form(forms.Form):key_word = forms.CharField(required=False)
views.py
from .models import Search_Formdef Search_View(request):if request.method == 'POST':form = Search_Form(request.POST)if form.is_valid():key_word = request.POST['key_word']request.session['note_search_page'] = request.pathrequest.session['note_search_key_words'] = key_wordreturn HttpResponseRedirect(request.path)else:if 'note_search_page' in request.session:if request.path == request.session['note_search_page']:key_word = request.session['note_search_key_words']# do somethingcontext = {}return render(request, "search_page.html", context)
L'important à retenir ici est qu'après un formulaire il faut toujours rediriger vers quelque chose.
Références
| Liens | Site |
|---|---|
| django form resubmitted upon refresh | stackoverflow |
| djangoproject | djangoproject |
