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 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))