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().values() random_list = list(atome_list) shuffle(random_list) random_list = random_list[:int(request.session['difficulte'])] request.session['quiz'] = random_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): resultats = [] points = 0 dt = round(time.time()-request.session['time']-1)*-1 for i in range(int(request.session['difficulte'])): current = [request.session['quiz'][i]['nom'],'',request.session['quiz'][i]['symbole'],'',''] if request.POST.get('input'+str(i+1)).casefold()==request.session['quiz'][i]['symbole'].casefold(): points+=20 current[1]=request.session['quiz'][i]['symbole'] current[3]="+10" current[4]="bg-success text-white" elif request.POST.get('input'+str(i+1)).casefold()=="": points-=5 current[1]=request.session['quiz'][i]['symbole'] current[3]="-5" current[4]="bg-warning text-dark" else: points-=10 current[1]=request.POST.get('input'+str(i+1)) current[3]="-10" current[4]="bg-danger text-white" resultats.append(current) 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, 'correction': resultats, '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))