Browse Source

Connexion avec login

master
Christophe SCAYA 4 years ago
parent
commit
f0ace2b8ab
  1. 4
      Readme.md
  2. 3
      quiz_atomes/admin.py
  3. 421
      quiz_atomes/data/login.csv
  4. 16
      quiz_atomes/forms.py
  5. 18
      quiz_atomes/management/commands/import_login.py
  6. 21
      quiz_atomes/migrations/0002_user.py
  7. 17
      quiz_atomes/migrations/0003_remove_user_pwd.py
  8. 5
      quiz_atomes/models.py
  9. 20
      quiz_atomes/templates/quiz_atomes/login.html
  10. 10
      quiz_atomes/templates/quiz_atomes/quiz_atomes.html
  11. 3
      quiz_atomes/urls.py
  12. 47
      quiz_atomes/views.py

4
Readme.md

@ -25,3 +25,7 @@ Initialiser la base de données et créer un compte admin pour l'interface de ge @@ -25,3 +25,7 @@ Initialiser la base de données et créer un compte admin pour l'interface de ge
Lancer le serveur de test :
`python manage.py runserver`
Pour importer une liste de logins pour l'application quiz_atomes :
`python manage.py import_login` (le fichier login.csv doit être présent dans .quiz_atomes/date/login.csv avec une première ligne nommée login)

3
quiz_atomes/admin.py

@ -1,10 +1,11 @@ @@ -1,10 +1,11 @@
from django.contrib import admin
# Register your models here.
from .models import Atome, Score
from .models import Atome, Score, User
class AtomeAdmin(admin.ModelAdmin):
list_display = ('pk','nom', 'symbole')
admin.site.register(Atome, AtomeAdmin)
admin.site.register(Score)
admin.site.register(User)

421
quiz_atomes/data/login.csv

@ -0,0 +1,421 @@ @@ -0,0 +1,421 @@
login
aarir
abeghraa
abidina
agodori
alami
amado_mh
amegatsl
amezians
amirouy
amri--bl
antonina
azzouza
abousefa
achie
achim
adewumia
agbanyoe
agnest
aissanim
ait_bads
akakpom
al_ghouj
ali_mbas
almeidaa
amary
amegatst
amirouo
ammarii
amrani2
antonini
aqqaoumz
ardesd
ayathura
bahiay
balobaya
bamwangm
bananea
baradjim
barryh
belkhiri
ben_amog
ben_amom
benmehin
bennoitl
berquiel
bestaniy
biain
bilongie
blauwarm
bouabidm
boucharm
boukhriw
bourys
bourye
bouyahic
babylonm
badiabin
baghrard
bahadouj
bailhacl
bakayokr
baniyahh
bathilym
bazilee
beaudran
bektacha
belahdar
belfkihw
belfkihl
belhasns
belhotim
belkaidi
bellarhs
ben_ahma
ben_aqdi
benmehim
ben_nacr
benrohoi
berangak
berangac
berbrim
berdegs
bibongeb
blaquiem
blondi
bonito_t
bonninn
bouabidy
bouazzaa
bougdira
boujerfr
boumedjm
bourhans
bourhanz
boutal
bouyahiz
brahimim
brunetm
brusselo
butonh
byadit
cantavet
cantem
chanteue
charoyk
cheikh_k
costa_ds
camaram
camarad
capards
capela
careanoc
caronm
carvalhj
catalana
chagasm
champenk
champenn
chanteus
cherifh
cidim
cimpana
clossec
cordonnm
correiar
corvon
cossard2
cossarda
costa_dr
courbe_m
couturac
crepinl
daboh
dadr
delmairm
deroussk
desicy-m
diallo2
doirin-k
drouartl
dubucl
dabom
da_cunhi
daot
darrajid
da_silv2
defossel
delaunal
demraoum
depierrl
derrazs
desauffs
de_sousl
dhornen
diabateb
dialloa
dialloi
dialloj
diarrac
diarraw
dobok
dorghale
doumbiaa
doumboum
dramea
drissoue
dumoulii
el_baiza
el_barda
el_bouhs
el_mahbn
elevet
el_baizw
el_ghazh
el_jahoh
esans
estelanl
ez_zahrj
faivrem
fernandt
ferreirb
franceal
francisa
fresacs
farssi2
farssis
faussoum
ferrandr
ferreirl
ferreirt
ferreirs
firetton
fofanac
fouched
furcyc
garniery
gauliert
guissec
gumiennt
gyalwant
gabi_gal
gerardt
germanyk
gomisj
goncalvn
gracchuc
guisses
hagen--m
halla2
hammamia
huitelel
habibib
haddadof
hallaa
haniquea
haquea
hassanys
hemontq
herzigm
hibaa
hollieza
ichoungm
illan2
imadoucs
iordaici
illanw
jaghninz
jean-man
jeremiej
jiliann
kamalm
kerdjouy
khataouc
koffi_gy
kabiwae
kamalb
kamals
kanoutea
karaa
khallada
klein_sl
klein_st
konatem
konen
kouadioj
kouassij
kouassia
labhiris
lamgardm
le_gueda
lonyn
laarejw
labbezc
labhirib
laden_gl
lahmarc
laidouna
lamgardw
langillh
laurat
lebarrom
le_couvr
lefevrek
le_guenj
lepetitc
lepetitm
lerouxt
le_sauss
liberkoj
locillaa
logboe
lopesd
mansourt
marquese
marquetk
martinsr
mendym
merilm
mohamede
mouassia
mounis
musitat
magassat
mahamani
mahnoukz
maisont
mampassy
mangalae
mapolac
marct
marcellv
mariem
martyr
matale_s
mateta-v
mateta_p
mayeye_t
mbembaa
mehrezr
mehrezn
meites
mekerria
mennani2
mfumuk
mohamedc
mohamedy
mokrania
montagnj
nguemae
nikamier
naouae
nedeya
ngomaj
nguyenm
nguyenn
nika_mif
nobletk
ondo-_nn
oualia
oualissy
oualkaiy
obounouk
oualis
oualissa
oualkais
oukrinew
peyenk
piresc
pruvostc
pachecoj
pagnerrl
payetk
payonm
pazs
peyenl
pezousm
pichona
piresi
piresm
poderk
podere
poirot-l
quimbren
quintelc
robichoj
rabaha
rabehy
rabihiy
radjii
raimbaul
ramdanee
ramdanih
ramdanir
ramothek
regaigui
rekioukl
renardm
renaude
rezkalll
ribeiroi
roselmaj
roselmaw
roussels
ruaulte
sais
said_saa
sanogoa
seggara
selvath2
sidiber
sissokom
sissoko2
syg
syb
syllaf
saheln
sahenouh
saint-je
saint_ct
salmit
sassil
sayadam
scheidl
schneidj
selvatha
serym
simoa_dm
sissokop
sissokos
sym
syd
sy-n_dii
szalansc
tacitet
thomas_l
timizara
tourem
tunkaray
tafitasy
taleby
tartier
tehars
termouly
thalesc
theophil
torneror
tourea
tra_biy
valee
valeriuk
valerium
valettea
vanessee
ventadok
verons
visiedol
wauquien
willayj
yaacouba
zhengm
1 login
2 aarir
3 abeghraa
4 abidina
5 agodori
6 alami
7 amado_mh
8 amegatsl
9 amezians
10 amirouy
11 amri--bl
12 antonina
13 azzouza
14 abousefa
15 achie
16 achim
17 adewumia
18 agbanyoe
19 agnest
20 aissanim
21 ait_bads
22 akakpom
23 al_ghouj
24 ali_mbas
25 almeidaa
26 amary
27 amegatst
28 amirouo
29 ammarii
30 amrani2
31 antonini
32 aqqaoumz
33 ardesd
34 ayathura
35 bahiay
36 balobaya
37 bamwangm
38 bananea
39 baradjim
40 barryh
41 belkhiri
42 ben_amog
43 ben_amom
44 benmehin
45 bennoitl
46 berquiel
47 bestaniy
48 biain
49 bilongie
50 blauwarm
51 bouabidm
52 boucharm
53 boukhriw
54 bourys
55 bourye
56 bouyahic
57 babylonm
58 badiabin
59 baghrard
60 bahadouj
61 bailhacl
62 bakayokr
63 baniyahh
64 bathilym
65 bazilee
66 beaudran
67 bektacha
68 belahdar
69 belfkihw
70 belfkihl
71 belhasns
72 belhotim
73 belkaidi
74 bellarhs
75 ben_ahma
76 ben_aqdi
77 benmehim
78 ben_nacr
79 benrohoi
80 berangak
81 berangac
82 berbrim
83 berdegs
84 bibongeb
85 blaquiem
86 blondi
87 bonito_t
88 bonninn
89 bouabidy
90 bouazzaa
91 bougdira
92 boujerfr
93 boumedjm
94 bourhans
95 bourhanz
96 boutal
97 bouyahiz
98 brahimim
99 brunetm
100 brusselo
101 butonh
102 byadit
103 cantavet
104 cantem
105 chanteue
106 charoyk
107 cheikh_k
108 costa_ds
109 camaram
110 camarad
111 capards
112 capela
113 careanoc
114 caronm
115 carvalhj
116 catalana
117 chagasm
118 champenk
119 champenn
120 chanteus
121 cherifh
122 cidim
123 cimpana
124 clossec
125 cordonnm
126 correiar
127 corvon
128 cossard2
129 cossarda
130 costa_dr
131 courbe_m
132 couturac
133 crepinl
134 daboh
135 dadr
136 delmairm
137 deroussk
138 desicy-m
139 diallo2
140 doirin-k
141 drouartl
142 dubucl
143 dabom
144 da_cunhi
145 daot
146 darrajid
147 da_silv2
148 defossel
149 delaunal
150 demraoum
151 depierrl
152 derrazs
153 desauffs
154 de_sousl
155 dhornen
156 diabateb
157 dialloa
158 dialloi
159 dialloj
160 diarrac
161 diarraw
162 dobok
163 dorghale
164 doumbiaa
165 doumboum
166 dramea
167 drissoue
168 dumoulii
169 el_baiza
170 el_barda
171 el_bouhs
172 el_mahbn
173 elevet
174 el_baizw
175 el_ghazh
176 el_jahoh
177 esans
178 estelanl
179 ez_zahrj
180 faivrem
181 fernandt
182 ferreirb
183 franceal
184 francisa
185 fresacs
186 farssi2
187 farssis
188 faussoum
189 ferrandr
190 ferreirl
191 ferreirt
192 ferreirs
193 firetton
194 fofanac
195 fouched
196 furcyc
197 garniery
198 gauliert
199 guissec
200 gumiennt
201 gyalwant
202 gabi_gal
203 gerardt
204 germanyk
205 gomisj
206 goncalvn
207 gracchuc
208 guisses
209 hagen--m
210 halla2
211 hammamia
212 huitelel
213 habibib
214 haddadof
215 hallaa
216 haniquea
217 haquea
218 hassanys
219 hemontq
220 herzigm
221 hibaa
222 hollieza
223 ichoungm
224 illan2
225 imadoucs
226 iordaici
227 illanw
228 jaghninz
229 jean-man
230 jeremiej
231 jiliann
232 kamalm
233 kerdjouy
234 khataouc
235 koffi_gy
236 kabiwae
237 kamalb
238 kamals
239 kanoutea
240 karaa
241 khallada
242 klein_sl
243 klein_st
244 konatem
245 konen
246 kouadioj
247 kouassij
248 kouassia
249 labhiris
250 lamgardm
251 le_gueda
252 lonyn
253 laarejw
254 labbezc
255 labhirib
256 laden_gl
257 lahmarc
258 laidouna
259 lamgardw
260 langillh
261 laurat
262 lebarrom
263 le_couvr
264 lefevrek
265 le_guenj
266 lepetitc
267 lepetitm
268 lerouxt
269 le_sauss
270 liberkoj
271 locillaa
272 logboe
273 lopesd
274 mansourt
275 marquese
276 marquetk
277 martinsr
278 mendym
279 merilm
280 mohamede
281 mouassia
282 mounis
283 musitat
284 magassat
285 mahamani
286 mahnoukz
287 maisont
288 mampassy
289 mangalae
290 mapolac
291 marct
292 marcellv
293 mariem
294 martyr
295 matale_s
296 mateta-v
297 mateta_p
298 mayeye_t
299 mbembaa
300 mehrezr
301 mehrezn
302 meites
303 mekerria
304 mennani2
305 mfumuk
306 mohamedc
307 mohamedy
308 mokrania
309 montagnj
310 nguemae
311 nikamier
312 naouae
313 nedeya
314 ngomaj
315 nguyenm
316 nguyenn
317 nika_mif
318 nobletk
319 ondo-_nn
320 oualia
321 oualissy
322 oualkaiy
323 obounouk
324 oualis
325 oualissa
326 oualkais
327 oukrinew
328 peyenk
329 piresc
330 pruvostc
331 pachecoj
332 pagnerrl
333 payetk
334 payonm
335 pazs
336 peyenl
337 pezousm
338 pichona
339 piresi
340 piresm
341 poderk
342 podere
343 poirot-l
344 quimbren
345 quintelc
346 robichoj
347 rabaha
348 rabehy
349 rabihiy
350 radjii
351 raimbaul
352 ramdanee
353 ramdanih
354 ramdanir
355 ramothek
356 regaigui
357 rekioukl
358 renardm
359 renaude
360 rezkalll
361 ribeiroi
362 roselmaj
363 roselmaw
364 roussels
365 ruaulte
366 sais
367 said_saa
368 sanogoa
369 seggara
370 selvath2
371 sidiber
372 sissokom
373 sissoko2
374 syg
375 syb
376 syllaf
377 saheln
378 sahenouh
379 saint-je
380 saint_ct
381 salmit
382 sassil
383 sayadam
384 scheidl
385 schneidj
386 selvatha
387 serym
388 simoa_dm
389 sissokop
390 sissokos
391 sym
392 syd
393 sy-n_dii
394 szalansc
395 tacitet
396 thomas_l
397 timizara
398 tourem
399 tunkaray
400 tafitasy
401 taleby
402 tartier
403 tehars
404 termouly
405 thalesc
406 theophil
407 torneror
408 tourea
409 tra_biy
410 valee
411 valeriuk
412 valerium
413 valettea
414 vanessee
415 ventadok
416 verons
417 visiedol
418 wauquien
419 willayj
420 yaacouba
421 zhengm

16
quiz_atomes/forms.py

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from .models import User
def validate_login(value):
if len(User.objects.filter(login=value)) == 0:
raise ValidationError(
_("Ce login n'existe pas"),
params={'value': value},
)
class UserForm(forms.Form):
login = forms.CharField(label="Login", max_length=10, validators=[validate_login])
diff = forms.DecimalField(initial=10,label="Nombre d'atomes", min_value=10, max_value=100, decimal_places=0)

18
quiz_atomes/management/commands/import_login.py

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
from django.core.management.base import BaseCommand
from csv import DictReader
from quiz_atomes.models import User
class Command(BaseCommand):
# Show this when the user types help
help = "Chargement des comptes depuis login.csv"
def handle(self, *args, **options):
if User.objects.exists():
print('Données déjà présentes')
return
print("Chargement des comptes")
for row in DictReader(open('./quiz_atomes/data/login.csv')):
User(login=row['login']).save()

21
quiz_atomes/migrations/0002_user.py

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
# Generated by Django 4.0.1 on 2022-04-10 15:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz_atomes', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('login', models.CharField(max_length=10)),
('pwd', models.CharField(max_length=10)),
],
),
]

17
quiz_atomes/migrations/0003_remove_user_pwd.py

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
# Generated by Django 4.0.1 on 2022-04-11 20:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('quiz_atomes', '0002_user'),
]
operations = [
migrations.RemoveField(
model_name='user',
name='pwd',
),
]

5
quiz_atomes/models.py

@ -12,3 +12,8 @@ class Score(models.Model): @@ -12,3 +12,8 @@ class Score(models.Model):
score_date = models.DateTimeField('Date du score')
def __str__(self):
return self.pseudo+" - "+str(self.score)+" - "+self.score_date.strftime("%Y-%m-%d %H:%M")
class User(models.Model):
login = models.CharField(max_length=10)
def __str__(self):
return self.login

20
quiz_atomes/templates/quiz_atomes/login.html

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
{% extends 'basic_template.html' %}{% block 'body' %}
<nav class="navbar navbar-light">
<div class="container"> <a class="navbar-brand text-primary" href="{% url "home" %}">
<i class="fa fa-home"></i>
</a>
</div>
</nav>
<div class="py-2 d-flex flex-column justify-content-center align-items-center">
<h3 class="text-center"><b>Nouvelle partie</b></h3>
<p class="text-center">Pour accéder au quiz, utilise le login utilisé pour accéder aux ordinateurs du collège.
<br/>Choisis ensuite un nombre d'atomes et à toi de jouer !</p>
<form action="{% url "login" %}" method="POST">{% csrf_token %}
<table class="table w-auto table-responsive-lg">
{{ form.as_table }}
<tr>
<td colspan="2"><input type="submit" value="C'est parti !"></td>
</tr>
</table>
</form>
</div>{% endblock %}

10
quiz_atomes/templates/quiz_atomes/quiz_atomes.html

@ -3,14 +3,14 @@ @@ -3,14 +3,14 @@
{% endblock %}{% block 'body' %}
<nav class="navbar navbar-light fixed-top bg-light">
<div class="container">
<a class="navbar-brand text-primary" href="{% url "home" %}">
<i class="fa fa-home"></i>
</a>
<div class="navbar-brand">
{{user}}
</div>
<div class="navbar-brand">
<time>00m 00s</time>
</div>
<a class="navbar-brand text-primary" href="{% url "settings" %}">
<i class="fa fa-gear"></i>
<a class="navbar-brand" href="{% url "logout" %}">
<i class="fa-solid fa-arrow-right-from-bracket"></i>
</a>
</div>
</nav>

3
quiz_atomes/urls.py

@ -5,6 +5,7 @@ from . import views @@ -5,6 +5,7 @@ from . import views
urlpatterns = [
path('', views.home, name='home'),
path('quiz_atomes/', views.quiz_atomes, name='quiz_atomes'),
path('settings/', views.settings, name='settings'),
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('scores/', views.scores, name='scores'),
]

47
quiz_atomes/views.py

@ -8,34 +8,30 @@ from django.shortcuts import redirect @@ -8,34 +8,30 @@ from django.shortcuts import redirect
import time
from django.views.decorators.cache import never_cache
from django.db.models import Min
from .forms import UserForm
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')
def login(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
request.session['pseudo'] = form.cleaned_data['login'].upper()
request.session['difficulte'] = int(form.cleaned_data['diff'])
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)
form = UserForm()
context = {
'form': form,
'favicon':'vial-solid.svg'
}
return TemplateResponse(request, 'quiz_atomes/login.html', {'form': form})
def logout(request):
request.session.flush()
return redirect('home')
@never_cache
def quiz_atomes(request):
@ -44,7 +40,7 @@ def quiz_atomes(request): @@ -44,7 +40,7 @@ def quiz_atomes(request):
return resultats(request)
if 'pseudo' not in request.session or 'difficulte' not in request.session:
return redirect('settings')
return redirect('login')
atome_list = Atome.objects.all().values()
random_list = list(atome_list)
@ -56,8 +52,7 @@ def quiz_atomes(request): @@ -56,8 +52,7 @@ def quiz_atomes(request):
template = loader.get_template('quiz_atomes/quiz_atomes.html')
context = {
'pseudo': request.session['pseudo'],
'diff': request.session['difficulte'],
'user': request.session['pseudo']+" ("+str(request.session['difficulte'])+")",
'atome_list': random_list,
'favicon':'vial-solid.svg'
}

Loading…
Cancel
Save