Ich habe eine einfache Voting-App geschrieben, die auf dem Django-Tutorial basiert. Ich möchte die Anzahl der Stimmen pro Besucher auf eins beschränken, also habe ich Djangos Middleware-Sitzungen benutzt. Ich bin völlig neu in Sitzungen, aber ich konnte etwas auf meinem lokalen Rechner arbeiten. Leider, sobald ich es nach Heroku geschoben hatte, hörte es auf zu arbeiten. Ich sah ein paar anderen SO Artikel zu diesem Thema, wenn Sie mehrere dynos haben, aber ich bin auf einem Hobby-Konto mit nur 1 dyno, so ...Django-Sitzung funktioniert nicht auf Heroku
Hier ist die Logik in meinem views.py:
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
if request.session.get('has_voted', False):
return render(request, 'poll/detail.html', {
'question': question,
'error_message': ("You've already voted."),
})
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'poll/detail.html', {
'question': question,
'error_message': "Make sure to select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
request.session['has_voted'] = True
return HttpResponseRedirect(reverse('results', args=(question.id,)))
Die Sitzungslogik kommt fast wörtlich aus der documentation, und meine settings.py ist korrekt konfiguriert. Gibt es eine spezielle Konfiguration für Heroku, die ich vermisst habe? Muss ich etwas zu meinem settings.py hinzufügen? Ich bin ratlos, da es keinen tatsächlichen Fehler gibt. Es schlägt einfach still ...
Danke!
Vielen Dank! Ich benutze Heroku Postgres. Ich hatte SESSION_ENGINE überhaupt nicht konfiguriert. Ich nahm an, dass der Standard in Ordnung wäre. Ich habe die obige Zeile hinzugefügt und es scheint jetzt zu funktionieren. Die Dokumentation erwähnt Einstellung CACHES, aber ich war nicht ganz sicher, wie Sie es konfigurieren. Ist das notwendig? Gibt es auch eine gute Möglichkeit zu testen, um sicherzustellen, dass die Sitzung beim Neustart des Dynos weiterhin bestehen bleibt? – knittingarch
Hallo! Daher sollten Sie auch Ihre Caching-Einstellungen festlegen. =) Wenn Sie die Dokumente lesen, werden Sie verstehen, was Sie je nach Ihrer Konfiguration verwenden müssen. Wenn Sie Ihre Sitzungen sofort testen möchten, können Sie eine Sitzung starten und dann 'heroku ps: restart 'sagen, um Ihre Dynos neu zu starten. Danach können Sie eine weitere Anfrage stellen. – rdegges
Ausgezeichnet! Vielen Dank für deine Hilfe. – knittingarch