/ / Ist es jemals notwendig, neue HttpRequest-Objekte in Django zu instanziieren? - Django, Django-Ansichten

Ist es jemals notwendig, neue HttpRequest-Objekte in Django zu instanziieren? - Django, Django-Ansichten

Ich habe eine Ansicht, die einen Benutzer authentifiziert. Wenn der Benutzer authentifiziert ist, sollte das Programm eine andere Ansicht mit der Anforderung und dem Benutzer als Parameter aufrufen.

    def home(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username=username, password=password)

if user is not None:
return index(request, user)
else:
context = {"error_message": "That username and password don"t exist in our system."}
return render(request, "list/home.html", context)

Wenn der Index aufgerufen wird, ist die Anforderung also dieselbe Instanz wie die Anforderung, die an die Home-Ansicht gesendet wird, oder? Meine Sorge ist, dass die Anfrage immer noch eine POST-Anfrage ist, wenn es sich um eine GET-Anfrage handelt.

Ist das ein Missverständnis? Soll ich ein neues Anforderungsobjekt erstellen und an den Index senden?

Vielen Dank.

Antworten:

2 für die Antwort № 1

Du solltest benutzen umleiten Methode

if user is not None:
return redirect(reverse("index"))

0 für die Antwort № 2

Aus dem ausgezeichneten "Welche technischen Details sollte ein Programmierer einer Webanwendung berücksichtigen, bevor er die Site veröffentlicht?",

Nach einem POST umleiten, falls der POST erfolgreich war, um zu verhindern, dass eine Aktualisierung erneut gesendet wird.

Sie haben also Recht, Sie möchten umleiten, um zu machenSicher, dass das vorherige Formular nicht gesendet wurde. Darüber hinaus sollten Sie nicht darüber nachdenken, dass Ansichten direkt verlinkt werden können, sondern in der Mentalität, dass eine Ansicht das ist, was Sie von einer Anfrage erhalten. Wie afilardo vorschlägt, sollten Sie umleiten.

return redirect("index")