Seite 1 von 1

veränderten request mit HttpResponseRedirect senden

Verfasst: Dienstag 5. April 2022, 16:29
von Metatron
ich möchte mit den HttpResponseRedirect einen request mit senden.
folgendes beispiel:

Code: Alles auswählen

def foo(request):
        post = request.POST.copy()
        post.update({'id': 2})
        request.POST = post

        return HttpResponseRedirect(reverse('foo:boo'))
        
def boo(request):
	print(request.POST)
	print(request.POST['id'])

derzeit erhalte ich mit

Code: Alles auswählen

print(request.POST)
folgende ausgabe:

Code: Alles auswählen

<QueryDict: {}>

Re: veränderten request mit HttpResponseRedirect senden

Verfasst: Dienstag 5. April 2022, 19:48
von sparrow
So funktioniert das nicht.
Wenn du ein Redirect zurück sendest, dann macht dein Client eine neue Anfrage auf die zurückgeschickte URL. Diese neue Anfrage weiß aber nicht, dass du da irgendwie am request rumgedocktert hast, denn der Client würde höchstens seinen ursprünglichen Content noch einmal senden.

Was hast du eigentlich vor? Ein Redirect scheint es eher nicht zu sein.

Re: veränderten request mit HttpResponseRedirect senden

Verfasst: Mittwoch 6. April 2022, 07:25
von Metatron
Die Methode A baut eine Website. Diese Website schickt mir dann Daten die die speichere ich mit Methode B. Anschließend will ich Methode A wieder aufrufen um die Aktualisierte Website anzuzeigen.
Methode A benötigt aber einige Parameter und die muss ich mit der Methode B mitschicken.

speudo:

Code: Alles auswählen

Methode_A(request):
      objekt = foo.objects.get(user= request.user, id=request.POST['id']).first()
      return render(request, 'foo/foo.html', { 'objekt ': objekt })

Methode_B(request):

      objekt  = save(request.POST)
      Methode_A(request.POST mit objekt.pk)

Re: veränderten request mit HttpResponseRedirect senden

Verfasst: Mittwoch 6. April 2022, 07:35
von sparrow
Warum sollte funktion_b (Namen werden in Python klein mit Unterstrich geschrieben, ausgenommen Klassen [PascalCase] und Konstanten [KOMPLETT_GROSS]) funktion_a wieder aufrufen? Das macht vom Ablauf her keinen Sinn.
funktion_a kann doch funktion_b einfach aufrufen und die gibt mit return zurück, was auch immer funktion_a braucht im das Ergebnis zu rendern.

Ansonsten musst du dein Problem vielleicht etwas weniger abstrakt darstellen und mal konkreter werden, was du eigentlich erreichen willst. Denn im Augenblick scheint das, was du für die Lösung hälst, nicht zum Problem zu passen.

Re: veränderten request mit HttpResponseRedirect senden

Verfasst: Mittwoch 6. April 2022, 07:56
von Metatron
ja ok, ist mir jetzt peinlich:
"funktion_a kann doch funktion_b einfach aufrufen und die gibt mit return zurück, was auch immer funktion_a braucht im das Ergebnis zu rendern."
klar kann ich das ergebnis einfach weiter durchreichen...

so funktioniert es:
danke

Code: Alles auswählen

Methode_A(request):
      objekt = foo.objects.get(user= request.user, id=request.POST['id']).first()
      return render(request, 'foo/foo.html', { 'objekt ': objekt })

Methode_B(request):

      objekt  = save(request.POST)
      post = request.POST.copy()
      post.update({'id': 2})
      request.POST = post
      return Methode_A(request)