-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Descripció del problema
Algunes vistes de l'aplicació no segueixen el patró Post-Redirect-Get (PRG), que és una bona pràctica en desenvolupament web per evitar re-enviaments accidentals de formularis quan l'usuari refresca la pàgina.
Exemple vistes afectades
regeneraImpartir (aula/apps/presencia/views.py)
django-aula/aula/apps/presencia/views.py
Lines 92 to 106 in fb188fd
| if form.is_valid(): | |
| r = regeneraThread( | |
| data_inici=form.cleaned_data["data_inici"], | |
| franja_inici=form.cleaned_data["franja_inici"], | |
| user=request.user, | |
| ) | |
| r.start() | |
| errors = [] | |
| warnings = [] | |
| infos = ["Iniciat procés regeneració"] | |
| resultat = {"errors": errors, "warnings": warnings, "infos": infos} | |
| return render( | |
| request, | |
| "resultat.html", | |
| {"head": head, "msgs": resultat}, |
Després d'un POST vàlid, retorna directament un template en lloc de fer un redirect.
Altres a revisar:
regeneraImpartir (presencia/views.py)
django-aula/aula/apps/presencia/views.py
Lines 103 to 107 in fb188fd
| return render( | |
| request, | |
| "resultat.html", | |
| {"head": head, "msgs": resultat}, | |
| ) |
sincronitzaEsfera (extEsfera/views.py)
django-aula/aula/apps/extEsfera/views.py
Lines 30 to 34 in fb188fd
| return render( | |
| request, | |
| "resultat.html", | |
| {"head": "Resultat importació Esfer@", "msgs": resultat}, | |
| ) |
sincronitzaSaga (extSaga/views.py)
django-aula/aula/apps/extSaga/views.py
Lines 37 to 41 in fb188fd
| return render( | |
| request, | |
| "resultat.html", | |
| {"head": "Resultat importació SAGA", "msgs": resultat}, | |
| ) |
sincronitzaPreinscripcio (extPreinscripcio/views.py)
django-aula/aula/apps/extPreinscripcio/views.py
Lines 34 to 37 in fb188fd
| reverse_lazy("administracio__configuracio__preinscripcio") | |
| ) | |
| return render( | |
| request, |
sincronitzaUntis (extUntis/views.py)
django-aula/aula/apps/extUntis/views.py
Lines 35 to 39 in fb188fd
| return render( | |
| request, | |
| "resultat.html", | |
| {"head": "Resultat sincronització Untis", "msgs": resultat}, |
tipusAvaluacioQualitativa (avaluacioQualitativa/views.py)
django-aula/aula/apps/avaluacioQualitativa/views.py
Lines 56 to 62 in fb188fd
| formset = formset_f(request.POST) | |
| if formset.is_valid(): | |
| formset.save() | |
| missatge = """Actualització realitzada.""" | |
| else: | |
| missatge = """Actualització no realitzada.""" | |
avaluacionsQualitatives (avaluacioQualitativa/views.py)
django-aula/aula/apps/avaluacioQualitativa/views.py
Lines 87 to 93 in fb188fd
| missatge = "" | |
| if request.method == "POST": | |
| formset = formset_f(request.POST) | |
| if formset.is_valid(): | |
| formset.save() | |
| missatge = """Actualització realitzada.""" |
escollirGrup (presenciaSetmanal/views.py)
django-aula/aula/apps/presenciaSetmanal/views.py
Lines 72 to 74 in fb188fd
| request, grup.id, dataReferenciaStr="", nomesPropies=nomesPropies | |
| ) | |
| else: |
mats (matricula/views.py)
django-aula/aula/apps/matricula/views.py
Lines 64 to 68 in fb188fd
| if not queryset: | |
| infos = [] | |
| infos.append("Sense matrícules pendents de verificació") | |
| return render( | |
| request, |
Problema que causa
Quan l'usuari refresca la pàgina després d'enviar el formulari, el navegador torna a enviar la petició POST, que pot causar:
- Execució duplicada d'accions (regeneració d'horaris, creació d'informes duplicats)
- Missatges confusos al navegador sobre re-enviament de formularis
- Experiència d'usuari pobra