veränderten request mit HttpResponseRedirect senden

Django, Flask, Bottle, WSGI, CGI…
Antworten
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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: {}>
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

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.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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)
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

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.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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)
Antworten