🌐 Live Platform: https://quiz.isystemsautomation.com/
Platformă online pentru pregătirea examenului ANRE Electrician Grupa II (Grupa 2). Include chestionare pentru Electrotehnică, Legislație GR. 2 și Norme Tehnice GR. 2 cu evaluare automată și explicații. Întrebările sunt stocate în baza de date și pot fi corectate și completate în timp.
- Modul Învață Public: Acces complet la toate întrebările, răspunsuri corecte și explicații fără autentificare
- SEO Optimizat: Pagini indexabile de Google cu structured data (JSON-LD), sitemap.xml, robots.txt
- URL-uri SEO-friendly: Slug-uri clare pentru subiecte, blocuri și întrebări
- Fără salvare progres: Progresul nu se salvează fără cont
- Salvare progres: Progresul și rezultatele se salvează automat
- Istoric rezultate: Vezi toate încercările tale anterioare
- Note personale: Salvează note private pentru fiecare bloc
- Reia chestionarele: Continuă de unde ai rămas
- Chestionare pe blocuri: Întrebări organizate în blocuri de ~20
- Tracking progres: Dashboard-ul arată ultima încercare per bloc cu codificare pe culori
- Evaluare automată: Evaluare server-side cu explicații
- Întrebări editabile:
- Utilizatorii normali pot completa
correct/explanationlipsă - Superuserii pot edita totul (inclusiv imagini)
- Utilizatorii normali pot completa
- Optimistic locking: Previne suprascrierea accidentală la editări simultane
- Python 3.10 or higher
- pip (Python package manager)
-
Create a virtual environment:
python3 -m venv .venv
-
Activate the virtual environment:
On Windows (PowerShell):
.venv\Scripts\Activate.ps1
On Windows (Command Prompt):
.venv\Scripts\activate.bat
On Linux/Mac:
source .venv/bin/activateImportant: After activation, you should see
(.venv)at the beginning of your command prompt. If you don't see this, the virtual environment is not activated and you'll get an "externally-managed-environment" error. -
Install dependencies:
pip3 install -r requirements.txt
-
Run migrations:
python3 manage.py migrate
Note: This creates the
django_sitetable required for sitemaps. After migration, create/update the Site record:python3 manage.py shell
Then in Python shell:
from django.contrib.sites.models import Site site, _ = Site.objects.get_or_create(pk=1) site.domain = 'quiz.isystemsautomation.com' site.name = 'Chestionare ANRE Electrician Grupa II' site.save() exit()
-
Create a superuser (optional, for admin access):
python3 manage.py createsuperuser
-
Import questions from JSON into the database:
python3 manage.py import_questions
-
Start the development server:
python3 manage.py runserver
-
Access the application:
- Public Learn mode:
http://127.0.0.1:8000/learn/(no login required) - Quiz mode (requires login):
http://127.0.0.1:8000/→ redirects to login - Admin panel:
http://127.0.0.1:8000/admin/(requires superuser)
- Public Learn mode:
If you see this when running python3 manage.py ..., the virtual environment is not active and/or dependencies are not installed for that Python interpreter.
Use the exact sequence below on Ubuntu:
cd /opt/gr2-quiz/gr2-quiz-platform
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
python3 manage.py checkIf your service runs via Apache mod_wsgi or Gunicorn, make sure it uses the same .venv Python path where Django is installed.
gr2-quiz-platform/
├── gr2quiz/ # Django project settings
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── quiz/ # Main quiz application
│ ├── models.py # Question, BlockAttempt, BlockNote models
│ ├── views.py # Quiz views (dashboard, block_take, etc.)
│ ├── learn_views.py # Public Learn/SEO views
│ ├── sitemaps.py # Sitemap configuration
│ ├── robots_views.py # robots.txt view
│ ├── utils.py # Helper functions (slugs, image URLs, etc.)
│ ├── templates/ # HTML templates
│ │ ├── learn/ # Public Learn mode templates
│ │ ├── quiz/ # Quiz mode templates
│ │ └── registration/ # Login/register templates
│ └── ...
├── quiz_data/ # JSON quiz data files (seed data)
│ ├── electrotehnica.json
│ ├── legislatie-gr-2.json
│ └── norme-tehnice-gr-2.json
├── static/ # Static files
│ ├── css/
│ │ └── app.css # Global styles
│ └── img/ # Images (logo, question images)
├── manage.py
├── requirements.txt
└── README.md
Platforma "Chestionare ANRE Electrician Grupa II (Grupa 2)" este o aplicație web destinată pregătirii și evaluării cunoștințelor pentru certificarea electricienilor din Grupa 2. Platforma oferă chestionare structurate pe discipline (Electrotehnică, Legislație GR. 2, Norme Tehnice GR. 2), organizate în blocuri de aproximativ 20 de întrebări fiecare.
Cine poate folosi platforma:
- Utilizatori fără cont: pot accesa modul public "Învață" pentru a vedea toate întrebările, răspunsurile corecte și explicațiile (fără salvare progres)
- Utilizatori normali: pot rezolva chestionare, vedea rezultatele și completa întrebări care lipsesc răspunsuri sau explicații
- Administratori: au acces complet la editarea tuturor întrebărilor, răspunsurilor și explicațiilor
Acces platformă: https://quiz.isystemsautomation.com/
Platforma oferă acces complet fără autentificare pentru învățare rapidă.
Pași:
- Accesează https://quiz.isystemsautomation.com/learn/
- Selectează disciplina (Electrotehnică, Legislație sau Norme Tehnice)
- Selectează un bloc pentru a vedea toate întrebările cu răspunsuri corecte și explicații
- Navighează între întrebări și blocurile pentru recapitulare
Caracteristici modul public:
- ✅ Vezi toate întrebările grilă
- ✅ Vezi răspunsurile corecte și explicațiile
- ✅ Acces imediat, fără înregistrare
- ❌ Progresul nu se salvează
- ❌ Nu poți rezolva chestionare (doar vizualizare)
Pentru a salva progresul și rezultatele, trebuie să îți creezi un cont.
Pași:
- Accesează pagina de înregistrare la https://quiz.isystemsautomation.com/accounts/register/
- Completează formularul:
- Utilizator – alege un nume de utilizator
- Parolă – alege o parolă sigură
- Confirmă parola – reintrodu parola
- Important: Pentru cont ai nevoie doar de utilizator și parolă. Nu cerem email, telefon sau nume real.
- Confirmă înregistrarea apăsând butonul "Creează cont"
- După înregistrare, vei fi autentificat automat și redirecționat către Dashboard
De ce să îți creezi cont:
- ✅ Salvezi progresul automat
- ✅ Vezi istoricul rezultatelor
- ✅ Reiei chestionarele de unde ai rămas
- ✅ Adaugi note personale per bloc
Dacă ai deja un cont, autentifică-te pentru a accesa platforma.
Pași:
- Accesează pagina de autentificare la https://quiz.isystemsautomation.com/accounts/login/
- Introdu Utilizator-ul tău în primul câmp
- Introdu Parolă ta în al doilea câmp
- Apasă butonul "Autentificare și salvează progres"
- Vei fi redirecționat automat către Dashboard
Notă: Dacă ai uitat parola, contactează administratorul intern sau creează un cont nou.
Opțiuni pe pagina de login:
- "Continuă fără cont" – accesează modul public "Învață" fără autentificare
- "Autentificare" – autentifică-te pentru salvare progres
Interfața de autentificare și acces fără cont:
După autentificare, vei ajunge pe pagina Dashboard, care este punctul central de navigare al platformei.
Structura Dashboard-ului:
Dashboard-ul este organizat în trei discipline principale:
- Electrotehnică – chestionare despre principiile electrotehnicii
- Legislație GR. 2 – chestionare despre legislația aplicabilă electricienilor Grupa 2
- Norme Tehnice GR. 2 – chestionare despre normele tehnice specifice
Blocuri și întrebări:
- Fiecare disciplină conține mai multe blocuri (Bloc 1, Bloc 2, Bloc 3, etc.)
- Fiecare bloc conține aproximativ 20 de întrebări (ultimul bloc poate avea mai puține)
- Fiecare întrebare are 3 opțiuni de răspuns: a, b sau c
Culori blocuri și semnificație:
Culoarea fiecărui bloc indică performanța ta la ultima încercare pentru acel bloc:
| Culoare | Semnificație | Scor (exemplu pentru 20 întrebări) |
|---|---|---|
| Alb | Nu ai început acest bloc | — |
| Verde | Scor perfect | 20/20 (toate corecte) |
| Galben | Scor bun | 18-19/20 (la 1-2 puncte de perfect) |
| Roșu | Necesită îmbunătățire | 0-17/20 (mai mult de 2 puncte sub perfect) |
Notă: Pragurile se ajustează automat pentru blocuri cu număr diferit de întrebări.
Informații afișate pe fiecare bloc:
- Numărul blocului (ex: "Bloc 1")
- Scorul ultimei încercări (ex: "18/20" sau "—" dacă nu ai încercat)
- Indicator "Notă salvată" dacă ai salvat o notă personală pentru acest bloc
- Preview al notei personale (dacă există)
Dashboard – selecția blocurilor și progresul salvat:
Pentru a rezolva un chestionar, selectează un bloc din Dashboard.
Pași pentru rezolvarea unui bloc:
- Selectează un bloc – apasă pe unul dintre blocurile afișate în Dashboard
- Citește întrebările – fiecare întrebare este afișată cu cele 3 opțiuni de răspuns (a, b, c)
- Selectează răspunsurile – apasă pe butonul radio corespunzător opțiunii pe care o consideri corectă
- Salvează nota personală (opțional) – în partea de sus a paginii poți scrie o notă personală pentru acest bloc, vizibilă doar pentru tine
- Trimite răspunsurile – după ce ai răspuns la toate întrebările, apasă butonul "Trimite răspunsurile"
După trimitere:
- Sistemul calculează automat scorul tău
- Vei vedea pagina de rezultate care afișează:
- Scorul total (ex: 18/20)
- Procentul (ex: 90%)
- Pentru fiecare întrebare: răspunsul tău, răspunsul corect, statusul (Corect/Greșit/Ne-evaluabil) și explicația (dacă există)
Salvare automată:
- Răspunsurile tale sunt salvate automat în browser (localStorage) pe măsură ce le selectezi
- Dacă navighezi către editarea unei întrebări, răspunsurile tale vor fi păstrate când revii
- Rezultatele sunt salvate automat în baza de date după trimitere
Exemplu de rezultate după completarea unui bloc:
Platforma marchează întrebările incomplete cu badge-uri colorate pentru a indica ce informații lipsesc.
Indicatori vizuali:
- "Lipsă răspuns" – badge roșu care indică că întrebarea nu are răspuns corect definit
- "Lipsă explicație" – badge roșu care indică că întrebarea nu are explicație
- "Răspuns existent." – badge verde care indică că răspunsul corect este completat
- "Explicație existentă." – badge verde care indică că explicația este completată
Reguli importante pentru utilizatori normali:
Utilizatorul normal POATE:
- Completa răspunsul corect dacă lipsește (câmpul
correcteste NULL) - Completa explicația dacă lipsește (câmpul
explanationeste gol)
Utilizatorul normal NU POATE modifica:
- Răspunsuri existente (dacă
correcteste deja completat) - Explicații existente (dacă
explanationeste deja completată)
Administratorul POATE:
- Modifica orice întrebare, indiferent dacă are deja răspuns sau explicație
- Corecta răspunsuri existente
- Corecta explicații existente
- Modifica setările de imagini
Indicatori „Răspuns existent" și „Lipsă explicație":
Dacă întâlnești o întrebare marcată cu "Lipsă răspuns" sau "Lipsă explicație", poți completa informațiile lipsă.
Pași detaliați:
- Apasă pe linkul "Edit / Completează" – acest link apare lângă întrebarea incompletă
- Selectează răspunsul corect (dacă lipsește):
- În formularul de editare, vei vedea un meniu dropdown cu opțiunile: A, B, C
- Selectează opțiunea pe care o consideri corectă
- Introdu explicația (dacă lipsește):
- În câmpul text pentru explicație, scrie o explicație clară despre de ce acest răspuns este corect
- Explicația ar trebui să fie suficient de detaliată pentru a ajuta alți utilizatori să înțeleagă conceptul
- Salvează modificările – apasă butonul "Salvează"
- Redirecționare automată – vei fi redirecționat înapoi la pagina de quiz, iar răspunsurile tale selectate anterior vor fi păstrate
Notă importantă: Odată ce ambele câmpuri (răspuns și explicație) sunt completate, doar administratorii pot modifica aceste date în viitor.
Protecție concurență:
- Platforma folosește optimistic locking pentru a preveni suprascrierea accidentală
- Dacă altcineva editează întrebarea în același timp, vei primi o notificare
- Modificările sunt salvate cu timestamp pentru consistență
Exemplu întrebare fără răspuns și explicație:
Interfața de editare pentru completarea răspunsului și explicației:
Administratorii (superuseri) au acces complet la toate funcționalitățile de editare ale platformei.
Ce poate face administratorul:
- Modifică răspunsuri existente – poate corecta răspunsurile corecte pentru orice întrebare
- Modifică explicații existente – poate actualiza sau corecta explicațiile pentru orice întrebare
- Editează setări imagini – poate modifica numele sau calea imaginilor asociate întrebărilor
- Actualizează baza de date – are acces complet la baza de date prin panoul de administrare
- Gestionează toate întrebările – poate modifica orice aspect al unei întrebări (text, opțiuni, răspuns, explicație, imagini)
Acces panou administrare:
Administratorii pot accesa panoul de administrare Django la adresa /admin/ după autentificare, unde pot:
- Gestiona toate întrebările (
Question) - Vizualiza încercările utilizatorilor (
BlockAttempt) – doar citire pentru audit - Gestiona notele personale (
BlockNote) – opțional
Matrice permisiuni:
| Funcționalitate | Utilizator normal | Administrator |
|---|---|---|
| Completează răspuns lipsă | ✅ Da | ✅ Da |
| Completează explicație lipsă | ✅ Da | ✅ Da |
| Modifică răspuns existent | ❌ Nu | ✅ Da |
| Modifică explicație existentă | ❌ Nu | ✅ Da |
| Modifică imagini | ❌ Nu | ✅ Da |
Acces panou admin (/admin/) |
❌ Nu | ✅ Da |
| Rezolvă chestionare | ✅ Da | ✅ Da |
| Vezi rezultate | ✅ Da | ✅ Da |
| Adaugă note personale | ✅ Da | ✅ Da |
După ce trimiți răspunsurile, platforma afișează pagina de rezultate cu informații detaliate despre performanța ta.
Elemente afișate:
- Scor total – afișat prominent în partea de sus (ex: "18/20")
- Procent – procentul de răspunsuri corecte (ex: "90%")
- Rezultate pe întrebări – pentru fiecare întrebare vei vedea:
- Răspunsul tău selectat
- Răspunsul corect
- Status badge cu una dintre următoarele:
- "Corect" (badge verde) – ai răspuns corect
- "Greșit" (badge roșu) – ai răspuns greșit
- "Ne-evaluabil" (badge gri) – întrebarea nu are răspuns corect definit, deci nu afectează scorul
- Explicație – textul explicativ (dacă este disponibil)
Cum să interpretezi rezultatele:
- Badge-uri verzi "Corect" – întrebări la care ai răspuns corect; continuă să menții acest nivel
- Badge-uri roșii "Greșit" – întrebări la care ai răspuns greșit; recitește explicația și studiază mai mult acest subiect
- Badge-uri grii "Ne-evaluabil" – întrebări care nu au încă răspuns corect definit; acestea nu afectează scorul tău, dar poți ajuta platforma completând răspunsul și explicația
Platforma salvează automat toate datele tale pentru a asigura o experiență fără pierdere de informații.
Salvare automată răspunsuri:
- Răspunsurile tale sunt salvate automat în browser (localStorage) pe măsură ce le selectezi
- Nu este necesară salvare manuală
- Dacă navighezi către editarea unei întrebări, răspunsurile tale selectate anterior vor fi păstrate și restaurate când revii la pagina de quiz
- Chiar dacă închizi browserul și revii mai târziu, răspunsurile tale vor fi păstrate până când trimiți quiz-ul
Salvare rezultate:
- După ce trimiți quiz-ul, rezultatele sunt salvate automat în baza de date
- Scorul tău este asociat cu contul tău și blocul respectiv
- Dashboard-ul va afișa automat ultima încercare pentru fiecare bloc
- Poți vedea istoricul complet al încercărilor tale (accesibil administratorilor pentru audit)
Notă personală:
- Notele personale pe care le salvezi pentru fiecare bloc sunt salvate permanent în baza de date
- Sunt asociate cu contul tău și blocul respectiv
- Sunt private – doar tu le poți vedea, nu sunt vizibile pentru alți utilizatori sau administratori
Securitate:
- Toate datele sunt protejate prin autentificare
- Parolele sunt hash-uite folosind algoritmi securizați
- CSRF protection este activată pe toate formularele
- Optimistic locking previne editări conflictuale
As a superuser you have full control over the content and configuration of the quiz.
- Log in with your superuser credentials.
- Open
/admin/in your browser. - You can manage:
Question– all questions, answers, explanations and image settingsBlockAttempt– attempts per user/block (read‑only for auditing)BlockNote– personal notes per user/block (optional)
For each Question you can edit:
subject,qid,block_numbertext,option_a,option_b,option_ccorrect(a/b/c)explanationimage_base– base filename for images (e.g.qe23)
- Import (seed or update empty fields from JSON):
python3 manage.py import_questions
- Export current database questions back into
quiz_data/*.json:python3 manage.py export_questions
The database is the main source of truth; JSON is mainly for backup / sync / external editing.
- Import questions:
python3 manage.py import_questions - Export questions:
python3 manage.py export_questions - Check images:
python3 manage.py check_images - Debug images:
python3 manage.py debug_images --qid <id> --subject <subject>
The platform includes comprehensive SEO optimization for public Learn pages:
- Structured Data (JSON-LD): BreadcrumbList, ItemList for question permalinks
- Sitemap:
/sitemap.xmlwith all public Learn pages - Robots.txt:
/robots.txtconfigured for search engine crawling - Meta Tags: Optimized titles, descriptions, OpenGraph tags
- Canonical URLs: All pages use absolute HTTPS canonical URLs
- SEO-friendly URLs: Clean slugs for subjects, blocks, and questions
The application uses SQLite by default. The database file (db.sqlite3) will be created automatically when you run migrations.
Important: After running migrations, ensure the django_site table has a Site record with your domain for sitemaps to work correctly.
- All routes except
/learn/,/accounts/login/,/accounts/register/,/sitemap.xml,/robots.txt, and static files require authentication - CSRF protection is enabled on all forms
- Passwords are hashed using Django's default password hashing
- Optimistic locking prevents concurrent edit conflicts
- Questions with
correct: nullare excluded from grading (ungradable questions) - Blocks are assigned from the JSON import based on
blocknumber or sequential by 20 if missing - The dashboard shows the last attempt per block, not the best attempt
- JSON files are seed data; the database is the source of truth for questions and edits
- Public Learn mode is accessible without authentication for SEO and learning purposes
- Image naming convention:
qefor electrotehnica,qlfor legislatie-gr-2,qnfor norme-tehnice-gr-2
-
Install gunicorn:
pip3 install gunicorn
-
Create systemd service (
/etc/systemd/system/gr2quiz.service):[Unit] Description=GR2 Quiz Platform After=network.target [Service] User=ubuntu WorkingDirectory=/opt/gr2-quiz/gr2-quiz-platform Environment="PATH=/opt/gr2-quiz/gr2-quiz-platform/.venv/bin" ExecStart=/opt/gr2-quiz/gr2-quiz-platform/.venv/bin/python -m gunicorn gr2quiz.wsgi:application --bind 127.0.0.1:8000 Restart=always [Install] WantedBy=multi-user.target
-
Start and enable service:
sudo systemctl daemon-reload sudo systemctl start gr2quiz sudo systemctl enable gr2quiz -
Recommended Django security env vars (behind Apache/Nginx TLS proxy):
export DJANGO_DEBUG=false export DJANGO_SECRET_KEY='replace-with-strong-random-secret' export DJANGO_ALLOWED_HOSTS='quiz.isystemsautomation.com' export DJANGO_USE_X_FORWARDED_PROTO=true # Enable redirect/HSTS only after proxy HTTPS headers are verified: export DJANGO_SECURE_SSL_REDIRECT=true export DJANGO_SECURE_HSTS_SECONDS=31536000 export DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=true export DJANGO_SECURE_HSTS_PRELOAD=true
-
Configure Apache (HTTPS vhost):
<VirtualHost *:443> ServerName quiz.isystemsautomation.com SSLEngine on # SSL certificate configuration... # Serve static files directly Alias /static/ /opt/gr2-quiz/gr2-quiz-platform/static/ <Directory /opt/gr2-quiz/gr2-quiz-platform/static> Require all granted </Directory> # Proxy to gunicorn ProxyPreserveHost On ProxyPass /static/ ! ProxyPass / http://127.0.0.1:8000/ ProxyPassReverse / http://127.0.0.1:8000/ </VirtualHost>
© 2024 ISYSTEMS AUTOMATION S.R.L.





