Skip to content

Violació del patró Post-Redirect-Get (PRG) en algunes vistes #336

@ctrl-alt-d

Description

@ctrl-alt-d

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)

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)

return render(
request,
"resultat.html",
{"head": head, "msgs": resultat},
)

sincronitzaEsfera (extEsfera/views.py)

return render(
request,
"resultat.html",
{"head": "Resultat importació Esfer@", "msgs": resultat},
)

sincronitzaSaga (extSaga/views.py)

return render(
request,
"resultat.html",
{"head": "Resultat importació SAGA", "msgs": resultat},
)

sincronitzaPreinscripcio (extPreinscripcio/views.py)

reverse_lazy("administracio__configuracio__preinscripcio")
)
return render(
request,

sincronitzaUntis (extUntis/views.py)

return render(
request,
"resultat.html",
{"head": "Resultat sincronització Untis", "msgs": resultat},

tipusAvaluacioQualitativa (avaluacioQualitativa/views.py)

formset = formset_f(request.POST)
if formset.is_valid():
formset.save()
missatge = """Actualització realitzada."""
else:
missatge = """Actualització no realitzada."""

avaluacionsQualitatives (avaluacioQualitativa/views.py)

missatge = ""
if request.method == "POST":
formset = formset_f(request.POST)
if formset.is_valid():
formset.save()
missatge = """Actualització realitzada."""

escollirGrup (presenciaSetmanal/views.py)

request, grup.id, dataReferenciaStr="", nomesPropies=nomesPropies
)
else:

mats (matricula/views.py)

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions