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.
122 lines
4.2 KiB
122 lines
4.2 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['nom'] = request.POST.get('nom').upper() |
|
request.session['prenom'] = request.POST.get('prenom').upper() |
|
if request.POST.get('nb') == "10" or request.POST.get('nb') == "20" or request.POST.get('nb') == "30" or request.POST.get('nb') == "40": |
|
request.session['difficulte'] = request.POST.get('nb') |
|
else: |
|
request.session['difficulte'] = "10" |
|
return redirect('quiz_atomes') |
|
else: |
|
if 'nom' in request.session and 'prenom' in request.session: |
|
context = { |
|
'nom': request.session['nom'], |
|
'prenom': request.session['prenom'], |
|
'difficulte': request.session['difficulte'], |
|
'favicon':'vial-solid.svg' |
|
} |
|
else: |
|
context = {'favicon':'vial-solid.svg', 'difficulte': '10'} |
|
return TemplateResponse(request, 'quiz_atomes/settings.html', context) |
|
|
|
@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]="+20" |
|
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')[:20] |
|
min_selection_score = score_list.aggregate(Min("score")).get('score__min') |
|
if score>=min_selection_score or Score.objects.count()<20: |
|
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')[:20] |
|
template = loader.get_template('quiz_atomes/scores.html') |
|
context = { |
|
'score_list': score_list, |
|
'favicon':'vial-solid.svg' |
|
} |
|
return HttpResponse(template.render(context, request))
|
|
|