Как решить эту проблему в моем веб-приложении Guess The Flag Django
Я совсем новичок в Django и пытаюсь создать с его помощью веб-игру "Угадай флаг".
На главной странице, когда кто-то нажимает кнопку "играть", он отправляется на страницу, где генерируется список из 4 случайно выбранных стран из БД, и только одна из этих 4 стран является фактическим ответом.
Вот код из views.py в моей директории App :
context = {}
context['submit'] = None
context['countries_list'] = None
score = []
score.clear()
context['score'] = 0
def play(request):
len_score = len(score)
countries = Country.objects.all()
real_choice = None
if request.POST:
get_guess = request.POST.get('guess')
print(request.POST)
if str(get_guess).casefold() == str(context['submit']).casefold():
score.append(1)
else:
score.clear()
len_score = len(score)
choices = random.sample(tuple(countries),4)
real_choice = random.choice(choices)
context['countries_list'] = choices
context['submit'] = real_choice
context['score'] = len_score
return render (request, 'base/play.html', context)
Все работает как ожидалось, когда играет только один человек, или сайт открыт только в одной вкладке.
Проблема в том, что если кто-то еще открывает сайт или он открыт более чем в одной вкладке, счет обнуляется и генерируется новый список случайных стран для всех пользователей, так что ваша угаданная страна никогда не будет правильной!
Как мне решить эту проблему? Опять же, я совсем новичок в этом, так что я остался в неведении.
Лучшим способом хранения краткосрочной информации о каждом пользователе являются переменные сеанса . Таким образом, вы можете поддерживать индивидуальные настройки пользователя. Например, что-то вроде:
def play(request):
len_score = len(score)
countries = Country.objects.all()
real_choice = None
if request.POST:
get_guess = request.POST.get('guess')
print(request.POST)
#Compare guess to session variable
#(using .get() which returns none rather than error if variable not found)
if str(get_guess).casefold() == str(request.session.get('real_choice').casefold():
score.append(1)
else:
score.clear()
len_score = len(score)
choices = random.sample(tuple(countries),4)
real_choice = random.choice(choices)
#Store answer in session variable
request.session['real_choice'] = real_choice
context['countries_list'] = choices
context['submit'] = real_choice
context['score'] = len_score
return render (request, 'base/play.html', context)