You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

98 lines
3.1 KiB

from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.template import loader
from .models import Atome, Score
from random import shuffle
from datetime import datetime
from django.shortcuts import redirect
import time
from django.views.decorators.cache import never_cache
from django.db.models import Min
def home(request):
return TemplateResponse(request, 'quiz_atomes/home.html', {'favicon':'vial-solid.svg'})
def settings(request):
if request.method =='POST':
if not request.POST.get('prenom') or not request.POST.get('nom'):
request.session['pseudo'] = "Anonyme"
else:
request.session['pseudo'] = request.POST.get('prenom')[0].upper()+". "+request.POST.get('nom').upper()
request.session['difficulte'] = request.POST.get('nb')
return redirect('quiz_atomes')
else:
return TemplateResponse(request, 'quiz_atomes/settings.html', {'favicon':'vial-solid.svg'})
@never_cache
def quiz_atomes(request):
if request.POST.get('ok'):
return resultats(request)
if 'pseudo' not in request.session or 'difficulte' not in request.session:
return redirect('settings')
atome_list = Atome.objects.all()
random_list = list(atome_list)
shuffle(random_list)
random_list = random_list[:int(request.session['difficulte'])]
symbole_list = []
for x in random_list:
symbole_list.append(x.symbole)
request.session['quiz'] = symbole_list
request.session['time'] = time.time()
template = loader.get_template('quiz_atomes/quiz_atomes.html')
context = {
'pseudo': request.session['pseudo'],
'diff': request.session['difficulte'],
'atome_list': random_list,
'favicon':'vial-solid.svg'
}
return HttpResponse(template.render(context, request))
def resultats(request):
points = 0
dt = round(time.time()-request.session['time']-1)*-1
for i in range(int(request.session['difficulte'])):
if request.POST.get('input'+str(i+1)).casefold()==request.session['quiz'][i].casefold():
points+=20
elif request.POST.get('input'+str(i+1)).casefold()=="":
points-=5
else:
points-=10
score=points+dt
best_score=0
if score>0:
score_list = Score.objects.all().order_by('-score')[:10]
min_selection_score = score_list.aggregate(Min("score")).get('score__min')
if score>=min_selection_score:
new_score = Score(pseudo=request.session['pseudo'], score=int(score), score_date=datetime.now())
new_score.save()
best_score=1
template = loader.get_template('quiz_atomes/resultats.html')
context = {
'points': points,
'dt': dt,
'score': score,
'best_score': best_score,
'favicon':'vial-solid.svg'
}
return HttpResponse(template.render(context, request))
def scores(request):
score_list = Score.objects.all().order_by('-score')[:10]
template = loader.get_template('quiz_atomes/scores.html')
context = {
'score_list': score_list,
'favicon':'vial-solid.svg'
}
return HttpResponse(template.render(context, request))