我寫了一個基於Django教程的簡單投票應用程序。我想限制每個訪問者的投票數量爲一個,所以我使用了Django的中間件會話。我對會話完全陌生,但我能夠在本地計算機上找到工作。不幸的是,一旦我把它推到Heroku,它就停止工作。我看到關於當你有多個DYNOS這個問題其他一些SO文章,但我就只有1 DYNO一個業餘愛好帳戶,所以......Django會話無法在Heroku上工作
下面是我的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,)))
會話邏輯幾乎逐字從documentation來,我的settings.py配置正確。我錯過了Heroku的特殊配置嗎?畢竟,我是否需要添加一些東西到我的settings.py中?由於沒有實際的錯誤,我感到不知所措。它只是失敗的默默...
謝謝!
謝謝!我正在使用Heroku Postgres。我根本沒有配置SESSION_ENGINE。我認爲默認會很好。我添加了上面的這一行,它現在似乎正在工作。 該文檔提到設置CACHES,但我不完全確定如何配置它。這是必要的嗎? 此外,有沒有一個好的方法來測試,以確保當dyno重新啓動時,會話仍然會持續? – knittingarch
Heyo!因此,您還需要設置緩存設置=)通過閱讀文檔,可以根據您的設置瞭解要使用的內容。如果你想現在測試你的會話,你可以開始一個會話,然後說'heroku ps:restart'來強制你的dynos重啓,之後你可以發出另一個請求。 – rdegges
優秀!非常感謝你的幫助。 – knittingarch