Der folgende Code funktioniert lokal, wenn ich den Entwicklungsserver von Django nutze, aber ich stoße auf zeitweilige Fehler in der Produktion mit Nginx und Gunicorn.Django Session KeyError, wenn der Schlüssel existiert
views.py
def first_view(request):
if request.method == "POST":
# not using a django form in the template, so need to parse the request POST
# create a dictionary with only strings as values
new_post = {key:val for key,val in request.POST.items() if key != 'csrfmiddlewaretoken'}
request.session['new_post'] = new_mappings # save for use within next view
# more logic here (nothing involving views)
return redirect('second_view')
def second_view(request):
if request.method == 'POST':
new_post = request.session['new_post']
# ... more code below
# render template with form that will eventually post to this view
Ich werde manchmal KeyError nach der Einlieferung in die zweite Ansicht erhalten. Basierend auf der documentation on when sessions are saved scheint es, als ob die Sitzungsvariable gespeichert werden sollte, da sie die Sitzung direkt ändert. Auch, wenn ich die sessionid nehmen die Fehlerseite Debug-Panel zur Verfügung gestellt und die Sitzung über Djangos API zugreifen, kann ich die ‚new_post‘ Session-Variablen siehe
python manage.py shell
>>> from django.contrib.sessions.backends.db import SessionStore
>>> s = SessionStore(session_key='sessionid_from_debug_panel')
>>> s['new_post']
# dictionary with expected post items
Gibt es etwas, was ich bin fehlt? Vielen Dank im Voraus für Ihre Hilfe!
Woraus besteht diese Variable? – Exprator
Die Variable new_post ist ein Wörterbuch, das ich mit dem request.POST QueryDict in einem Wörterbuch-Verständnis erstellt habe. Die Werte sind alle Zeichenfolgen. – atm
Sorry, ich habe den Namen der Variablen new_mappings verpasst? Bist du sicher, dass es nicht leer ist? Oder Sie tippen es anstelle von new_post ein? – Exprator