Djangoチュートリアルに基づいて簡単な投票アプリケーションを作成しました。ビジター1人あたりの投票数を1に制限したいので、Djangoのミドルウェアセッションを使用しました。セッションは全く新しいですが、ローカルマシンで何か作業をすることができました。残念ながら、一度それをHerokuにプッシュすると、動作しなくなりました。あなたが複数のdynosを持っているとき、私はこの問題について、いくつかの他のSOの記事を見ましたが、私はちょうど1ダイノと趣味アカウントの午前、そう...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を設定していませんでした。私はデフォルトがうまくいくと思った。私は上記の行を追加して、今働いているようです。 ドキュメントにはキャッシュの設定が記載されていますが、設定方法は完全にはわかりませんでした。それは必要ですか? また、ダイノが再起動したときにセッションが引き続き保持されることを確認するためのテスト方法がありますか? – knittingarch
Heyo!だから、キャッシュ設定も同様に設定したいと思うでしょう=)ドキュメントを読んで、あなたが持っている設定に基づいて何を使うべきかを理解できます。セッションを今すぐテストしたい場合は、セッションを開始してから、 'heroku ps:restart'を実行してダイノスを強制的に再起動させてから、別のリクエストを行うことができます。 – rdegges
優秀!助けてくれてありがとう。 – knittingarch