Я написал простое приложение для голосования, основанное на учебнике Django. Я хочу ограничить количество голосов на одного посетителя, поэтому я использовал сеансы промежуточного программного обеспечения Django. Я совершенно не знаком с сессиями, но мне удалось получить что-то, что работает на моей локальной машине. К сожалению, как только я подтолкнул его к Хереку, он прекратил работать. Я видел несколько других SO статей относительно этого вопроса, когда у вас есть несколько динамометрических стендов, но я на Hobby счете только 1 дин, так что ...Django Session не работает на 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, но я не был полностью уверен, как ее настроить. Это необходимо? Кроме того, есть ли хороший способ проверить, чтобы при перезапуске диноза сеанса все еще сохранялись? – knittingarch
Heyo! Таким образом, вы также захотите установить свои настройки кэширования, а также =) Чтение через документы даст вам представление о том, что использовать на основе какой настройки у вас есть. Если вы хотите протестировать свои сеансы прямо сейчас, вы можете начать сеанс, а затем сказать «heroku ps: restart», чтобы заставить ваши динамики перезагрузиться, после чего вы можете сделать другой запрос. – rdegges
Отлично! Большое спасибо за Вашу помощь. – knittingarch