Uni quezes and about page almost finished

This commit is contained in:
2025-01-12 16:48:09 +01:00
parent 72c21d6d81
commit 215ba53b11
66 changed files with 4408 additions and 126 deletions

View File

@ -0,0 +1,132 @@
Kérdés: Miért van külön Web.Debug.config és Web.Release.config fájl a webalkalmazásban?
Azért, mert így külön definiálhatóak beállítások éles és demo környezetekhez.
!Azért, mert így külön definiálhatóak beállítások a SolutionConfiguration alatt választható build típusokhoz.
Azért, mert így külön definiálhatóak változtatható a kinézetéles és demo környezetek között.
Kérdés: Web alkalmazásban adatbáziskapcsolat adatai hol tárolhatóak?
ConfigurationSettings.cs fájlban
!Web.config fájlban
Global.asax fájlban
Kérdés: Web alkalmazásban mit tartalmaz a Global.asax.cs fájl?
!Az egész alkalmazás működését érintő események bekövetkezésekor végrehajtandó kódot.
Az egész alkalmazásból elérhető metódusokat.
Globális változók definíciója
Kérdés: Web alkalmazásban mi a különbség valami.aspx, valami.aspx.cs és valami.aspx.designer.cs fájlok tartalma között?
!Az aspx tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.cs a hozzá tartozó codebehind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx.designer.cs generált fájl, mely a vezérlők definícióját tartalmazza.
Az .cs tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.designer.cs a hozzá tartozó codebehind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx.csgenerált fájl, mely a vezérlők definícióját tartalmazza.
Az aspx.designer.cs tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.cs a hozzá tartozó codebehind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx generált fájl, mely a vezérlők definícióját tartalmazza.
Kérdés: Web alkalmazásban mit tartalmaz a Site.master fájl?
Az oldal kerete, kinézete és működése, melyet az .cs fájlok töltenek meg tartalommal
!Az oldal kerete, kinézete és működése, melyet az .aspx fájlok töltenek meg tartalommal
Az egész alkalmazás működését érintő események bekövetkezésekor végrehajtandó kódot.
Az egész alkalmazásból elérhető metódusokat.
Globális változók definíciója
Kérdés: Web alkalmazásban lehet-e több site.master fájl?
!Igen, lehet
Nem, nem lehet.
Kérdés: Web alkalmazásban egy aspx fájlban a <%: %> jel található, mit jelent?
A végleges, browsernek küldött html tartalom előállítása során c# nyelven kell értelmezni a jelek közötti részt.
!A végleges, browsernek küldött html tartalomban jelenjen meg a jelek között található kifejezés értéke.
Kérdés: Web alkalmazásban egy aspx fájlban a <% %> jel található, mit jelent?
!A végleges, browsernek küldött html tartalom előállítása során c# nyelven kell értelmezni a jelek közötti részt.
A végleges, browsernek küldött html tartalomban jelenjen meg a jelek között található kifejezés értéke.
Kérdés: Web alkalmazásban(Web forms) mit értünk a codebehind fájl alatt?
!Azt a .aspx.cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Azt a POCO .cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Azt a .designer.cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Kérdés: Web alkalmazásban (web forms) hogyan generáltatható egy vezérlőelem default eseménykezelője?
!Dupla kattintás a vezérlőelemen
!Properties panel, event gomb alapján a kiválasztott eseményen dupla kattintás
Tools menü, events... és ott kiválasztható 'adddefault'
Kérdés: Web alkalmazásban (web forms) válassza ki,melyek a választható/használható vezérlő elemek?
Clock
!Button
!Textbox
!DropdownList
!Checkbox
Kérdés: Web alkalmazásban (Web forms) mit tudhatunk meg az IsPostBacktulajdonsából?
!Értéke hamis, ha ez az első oldalbetöltés.
Értéke hamis, ha az oldalbetöltés vezérlés hatására történt
Kérdés: Web alkalmazásban DropdownList vezérlőhöz hogyan tudunk elemeket hozzáadni?
!Példány.Itemskollekció manipulálásával
Példány.Selectionkollekció manipulálásával
Példány.CustomElementskollekció manipulálásával
Kérdés: Web alkalmazásban (Web forms) egy Label típusú vezérlőelemen megjelenő szöveg melyik tulajdonsággal állítható be?
Példány.Label
Példány.Caption
!Példány.Text
Példány.ShowText()
Kérdés: Web alkalmazásban (Web forms) egy Textbox típusú vezérlőelembe user által írt szöveg melyik tulajdonsággal olvasható ki?
Példány.Label
Példány.Caption
!Példány.Text
Példány.ShowText()
Kérdés: Web alkalmazásban (Web forms) egy Textbox típusú melyik tulajdonsággal tiltható le (user nem szerkesztheti)?
Disabled tulajdonság true értékre állításával
!Enabled tulajdonság false értékre állításával
Visible tulajdonság false értékre állításával
Opacity tulajdonság 0 értékre állításával
Kérdés: Web alkalmazásban (web forms) egy TextBox típusú vezérlőben hogyan tudunk több sornyi szöveget megjeleníteni?
Nem lehetséges, alapvetően userinput-ra való
Text tulajdonságba sortöréssel ellátott szöveget helyezünk, EnableMultiLine tulajdonságot true értékre állítva
!Text tulajdonságba sortöréssel ellátott szöveget helyezünk, TextMode tulajdonságot MultiLine értékre állítva
Kérdés: MVC projekt esetén tipikusan hova futnak be a browser kérései?
Controller osztályok ActionResult attribútummal ellátott metóduasihoz.
!Controller osztályok publikus metódusaihoz.
Manager osztályok publikus metódusaihoz.
Kérdés: Mi határozza meg, hogy a browser címsorában lévő uri hova mutat az alkalmazásban?
Controllerek publikus metódusaihoz futnak be.
!Routing szabályokkal kell megadni.
A Contextben kell megadni.
Kérdés: MVC projekt esetén tipikusan mit értünk ViewModel alatt?
!Egy View alapját szolgáltató osztály, mely tipikusan tartalmaz számított mezőket és lekérdezett értékeket.
Azon osztályok ezek, melyek az adatbázisban kerülnek perzisztálásra.
Egy View alapját szolgáltató osztály, mely tipikusan nem tartalmaz számított mezőket és lekérdezett értékeket.
Kérdés: Mire utal az MVC minta?
!Model-View-Controller
Model-ViewModel-Control
Kérdés: MVC Web alkalmazásban hogyan kerül egy View megjelenítésre?
A megadott URL egy HTML oldalra mutat, melyet a browser megjelenít, ez a View.
!A megadott URL egy Controller metódusra mutat, mely View-t adhat vissza.
ViewModel generálódik és jeleníti meg a browser.
Kérdés: MVC alkalmazás esetén mikor fog kiértékelődni a <%%> jelek közötti kifejezés?
Csak az első megjelenítés során
!Az oldal minden elkészítése során
Az oldal minden elkészítése során, ami nem IsPostBack
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált Scripts mappában?
SQL script fájlok
!Javascript fájlok
.cs fájlok
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált Styles mappában?
!CSS fájlok
Aspx fájlok
Ascx fájlok
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált App_Data mappában?
Metadata fájlok (.cs)
!Helyi adatbázis fájlok
Konfigurációs fájlok

View File

@ -0,0 +1,131 @@
Kérdés: Miért van külön Web.Debug.config és Web.Release.config fájl a webalkalmazásban?
Azért, mert így külön definiálhatóak beállítások éles és demo környezetekhez.
!Azért, mert így külön definiálhatóak beállítások a Solution Configuration alatt választható build típusokhoz.
Azért, mert így külön definiálhatóak változtatható a kinézet éles és demo környezetek között.
Kérdés: Web alkalmazásban adatbáziskapcsolat adatai hol tárolhatóak?
ConfigurationSettings.cs fájlban
!Web.config fájlban
Global.asax fájlban
Kérdés: Web alkalmazásban mit tartalmaz a Global.asax.cs fájl?
!Az egész alkalmazás működését érintő események bekövetkezésekor végrehajtandó kódot.
Az egész alkalmazásból elérhető metódusokat.
Globális változók definíciója
Kérdés: Web alkalmazásban mi a különbség valami.aspx, valami.aspx.cs és valami.aspx.designer.cs fájlok tartalma között?
!Az aspx tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.cs a hozzá tartozó code behind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx.designer.cs generált fájl, mely a vezérlők definícióját tartalmazza.
Az .cs tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.designer.cs a hozzá tartozó code behind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx.cs generált fájl, mely a vezérlők definícióját tartalmazza.
Az aspx.designer.cs tartalmazza a vezérlőelemek elhelyezkedését, típusát és alapvelő működését, az aspx.cs a hozzá tartozó code behind fájl (főként vezérlőelemek kezelésére vonatkozó kóddal), míg az aspx generált fájl, mely a vezérlők definícióját tartalmazza.
Kérdés: Web alkalmazásban mit tartalmaz a Site.master fájl?
Az oldal kerete, kinézete és működése, melyet az .cs fájlok töltenek meg tartalommal
!Az oldal kerete, kinézete és működése, melyet az .aspx fájlok töltenek meg tartalommal
Az egész alkalmazás működését érintő események bekövetkezésekor végrehajtandó kódot.
Az egész alkalmazásból elérhető metódusokat.
Globális változók definíciója
Kérdés: Web alkalmazásban lehet-e több site.master fájl?
!Igen, lehet
Nem, nem lehet.
Kérdés: Web alkalmazásban egy aspx fájlban a <%: %> jel található, mit jelent?
A végleges, browsernek küldött html tartalom előállítása során c# nyelven kell értelmezni a jelek közötti részt.
!A végleges, browsernek küldött html tartalomban jelenjen meg a jelek között található kifejezés értéke.
Kérdés: Web alkalmazásban egy aspx fájlban a <% %> jel található, mit jelent?
!A végleges, browsernek küldött html tartalom előállítása során c# nyelven kell értelmezni a jelek közötti részt.
A végleges, browsernek küldött html tartalomban jelenjen meg a jelek között található kifejezés értéke.
Kérdés: Web alkalmazásban(Web forms) mit értünk a code behind fájl alatt?
!Azt a .aspx.cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Azt a POCO .cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Azt a .designer.cs fájlt, mely az aspx fájllal összhangban tartalmazza többek között az események kezelőit.
Kérdés: Web alkalmazásban (web forms) hogyan generáltatható egy vezérlőelem default eseménykezelője?
!Dupla kattintás a vezérlőelemen
!Properties panel, event gomb alapján a kiválasztott eseményen dupla kattintás
Tools menü, events… és ott kiválasztható add default
Kérdés: Web alkalmazásban (web forms) válassza ki,melyek a választható/használható vezérlő elemek?
Clock
!Button
!Textbox
!DropdownList
!Checkbox
Kérdés: Web alkalmazásban (Web forms) mit tudhatunk meg az IsPostBack tulajdonsából?
!Értéke hamis, ha ez az első oldalbetöltés.
Értéke hamis, ha az oldalbetöltés vezérlés hatására történt
Kérdés: Web alkalmazásban DropdownList vezérlőhöz hogyan tudunk elemeket hozzáadni?
!Példány.Items kollekció manipulálásával
Példány.Selection kollekció manipulálásával
Példány.CustomElements kollekció manipulálásával
Kérdés: Web alkalmazásban (Web forms) egy Label típusú vezérlőelemen megjelenő szöveg melyik tulajdonsággal állítható be?
Példány.Label
Példány.Caption
!Példány.Text
Példány.ShowText()
Kérdés: Web alkalmazásban (Web forms) egy Textbox típusú vezérlőelembe user által írt szöveg melyik tulajdonsággal olvasható ki?
Példány.Label
Példány.Caption
!Példány.Text
Példány.ShowText()
Kérdés: Web alkalmazásban (Web forms) egy Textbox típusú melyik tulajdonsággal tiltható le (user nem szerkesztheti)?
Disabled tulajdonság true értékre állításával
!Enabled tulajdonság false értékre állításával
Visible tulajdonság false értékre állításával
Opacity tulajdonság 0 értékre állításával
Kérdés: Web alkalmazásban (web forms) egy TextBox típusú vezérlőben hogyan tudunk több sornyi szöveget megjeleníteni?
Nem lehetséges, alapvetően user input-ra való
Text tulajdonságba sortöréssel ellátott szöveget helyezünk, EnableMultiLine tulajdonságot true értékre állítva
!Text tulajdonságba sortöréssel ellátott szöveget helyezünk, TextMode tulajdonságot MultiLine értékre állítva
Kérdés:MVC projekt esetén tipikusan hova futnak be a browser kérései?
Controller osztályok ActionResult attribútummal ellátott metóduasihoz.
!Controller osztályok publikus metódusaihoz.
Manager osztályok publikus metódusaihoz.
Kérdés: Mi határozza meg, hogy a browser címsorában lévő uri hova mutat az alkalmazásban?
Controllerek publikus metódusaihoz futnak be.
!Routing szabályokkal kell megadni.
A Contextben kell megadni.
Kérdés: MVC projekt esetén tipikusan mit értünk ViewModel alatt?
!Egy View alapját szolgáltató osztály, mely tipikusan tartalmaz számított mezőket és lekérdezett értékeket.
Azon osztályok ezek, melyek az adatbázisban kerülnek perzisztálásra.
Egy View alapját szolgáltató osztály, mely tipikusan nem tartalmaz számított mezőket és lekérdezett értékeket.
Kérdés: Mire utal az MVC minta?
!Model-View-Controller
Model-ViewModel-Control
Kérdés: MVC Web alkalmazásban hogyan kerül egy View megjelenítésre?
A megadott URL egy HTML oldalra mutat, melyet a browser megjelenít, ez a View.
!A megadott URL egy Controller metódusra mutat, mely View-t adhat vissza.
ViewModel generálódik és jeleníti meg a browser.
Kérdés: MVC alkalmazás esetén mikor fog kiértékelődni a <%%> jelek közötti kifejezés?
Csak az első megjelenítés során
!Az oldal minden elkészítése során
Az oldal minden elkészítése során, ami nem IsPostBack
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált Scripts mappában?
SQL script fájlok
!Javascript fájlok
.cs fájlok
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált Styles mappában?
!CSS fájlok
Aspx fájlok
Ascx fájlok
Kérdés: Web alkalmazásban (Web forms) tipikusan milyen típusú fájlok lehetnek az előre definiált App_Data mappában?
Metadata fájlok (.cs)
!Helyi adatbázis fájlok
Konfigurációs fájlok

View File

@ -0,0 +1,84 @@
Kérdés: MVC projekt esetén tipikusan mit értünk ViewModel alatt?
!Egy View alapját szolgáltató osztály, mely tipikusan tartalmaz számított mezőket és lekérdezett értékeket.
Azon osztályok ezek, melyek az adatbázisban kerülnek perzisztálásra.
Egy View alapját szolgáltató osztály, mely tipikusan nem tartalmaz számított mezőket és lekérdezett értékeket.
Kérdés: Tipikusan mit értünk Context alatt?
Minden ide tartozik, ami a Model osztályokban van.
Minden ide tartozik, mely megmondja, hogy hol és milyen adatok érhetőek el.
!Minden ide tartozik, amely a tárolt adatokat írja le (tulajdonságok, kapcsolatok).
Kérdés: MVC projektben, adatkezeléssel kapcsolatban, miért/mikor előnyös Initializer használata?
Mert így minden Model osztályból tábla készíthető, egy lépésben.
!Mert így nem kell újra felvinni teszt adatokat fejlesztés közben, amikor intenzíven változik a db séma.
Mert így minden változás a sémában automatikusan rögzítve lesz.
Kérdés: Entity Framework mit jelent a Table-per-hierarchy pattern használata/mit eredményez?
Minden keletkezett táblában benne lesz az összes tulajdonság, ami csak felmerül a Context-ben, így gyorsul a hozzáférés.
!Minden öröklődési hierarchiához egy tábla készül az ős nevével, mely minden leszármazott tulajdonságot és Discriminatort tartalmaz.
Annyi tábla keletkezik belső hivatkozásokkal, ahány osztály részt vesz az öröklésben.
Kérdés: Entity Framework mit jelent a Table-per-type pattern használata/mit eredményez?
!Annyi tábla keletkezik belső hivatkozásokkal, ahány osztály részt vesz az öröklésben.
Minden öröklődési hierarchiához egy tábla készül az ős nevével, mely minden leszármazott tulajdonságot és Discriminatort tartalmaz.
Minden keletkezett táblában benne lesz az összes tulajdonság, ami csak felmerül a Context-ben, így gyorsul a hozzáférés.
Kérdés: Entity Framework konkurencia kezelésére melyek a lehetséges módok?
Contextben lock segítségével.
!Timestamp/RowVersion használata.
!Where feltételben az összes tulajdonság megjelenítése.
Kérdés: MVC projekt esetén mire való a MasterPage?
Ez tipikusan a nyitóoldal.
Ez tipikusan a kezdőoldal.
!Ez adhatja a keretet, melyben a tartalom megjelenhet.
Kérdés: MVC projekt esetén mire használható a ViewBag?
!Egy View kollekciót lehet segítsségével megjeleníteni, akár egyszerre több controllerből is.
Olyan objektum, melynek nincsenek előre definiált tulajdonságai, kétirányban bármi bele tehető.
View-kat lehet controllerekhez küldeni vele.
Kérdés: Entity Framework tipikusan milyen típusú elemekből lesznek táblák?
ViewModelekből, ez attributummal jelezhető.
!Model folder POCO osztályaiból.
Controller metódusok ActionResult visszatérésű elemeiből.
Kérdés: Entity Framework Ha tulajdonságként 1:N kapcsolat megvalósítása a cél, akkor…
…generikus IDictionary interfészt megvalósító tulajdonság kell.
…IList<long> tulajdonság kell az idegen kulcs miatt.
!…generikus ICollection interfészt megvalósító tulajdonság kell.
Kérdés: Entity Framework Ha tulajdonságként 1:1 kapcsolat megvalósítása a cél, akkor…
…protected property kell, olyan típussal, ami a hivatkozott elem típusa.
…virtual property kell, olyan típussal, ami a másik elem típusa.
!…publikus property get részében kell lekérdezni ID alapján és visszaadni.
Kérdés: Entity Framework mivel szabályozható, hogy mely osztályokból készüljön tábla?
Ezt Context generikus DbSet tulajdonságai határozzák meg.
Web.config fájl ConnectionStrings részében kell megadni.
!A model osztályok atributumai határozzák meg.
Kérdés: Entity Framework hogyan állíthatjuk be az adatok inicializálását?
Initializer osztály kell / Initialize() metódus felülbírálatával.
Az Application_Start() metódus való erre.
!Initializer osztály kell / Seed metódus override.
Kérdés: MVC projekt esetén tipikusan hova futnak be a browser kérései?
Controller osztályok ActionResult attribútummal ellátott metódusaihoz.
!Controller osztályok publikus metódusaihoz.
Manager osztályok publikus metódusaihoz.
Kérdés: Mi határozza meg, hogy a browser címsorában lévő URI hova mutat az alkalmazásban?
Controllerek publikus metódusaihoz futnak be.
!Routing szabályokkal kell megadni.
A Contextben kell megadni.
Kérdés: MVC - Hogyan tud egy View értékeket visszaadni egy Controllernek?
!FormCollection segítségével.
QueryString segítségével.
ViewModel postolásával.
Kérdés: Miért előnyös az IQueryable interfész használata?
Mert így az adatbázisba nem kell külön elmenteni az adatokat, ez azonnal megtörténik.
!Mert Query Object pattern megvalósítás miatt, csak a lekérdezést tárolja, késői kiértékelés lehetséges.
Mert így azonnal rendelkezésre áll az egész halmaz, igaz több adat kerülhet átvitelre.

View File

@ -0,0 +1,130 @@
from flask import Flask, render_template, request, redirect, url_for, session, Blueprint
import os
import random
# List of text files with questions
TEXTFILES = ["./templates/uni/subjects/portalfejlesztes_net_ben/kerdessor1_manual.txt", "./templates/uni/subjects/portalfejlesztes_net_ben/kerdessor2_manual.txt", "./templates/uni/subjects/portalfejlesztes_net_ben/kerdessor3.txt"]
# Define Blueprint for the portalfejlesztes quiz
portalfejlesztes_net_ben = Blueprint(
'portalfejlesztes_net_ben',
__name__,
template_folder='./templates'
)
# Parse the questions from text files
def parse_questions():
content = []
for file_path in TEXTFILES:
with open(file_path, 'r', encoding='utf-8') as file:
content.extend(file.read().split("\n\n"))
questions = []
for block in content:
lines = block.strip().split("\n")
question = lines[0].replace("Kérdés: ", "").strip()
answers = []
correct_answers = []
for line in lines[1:]:
answer = line.strip()
if answer.startswith('!'):
correct_answers.append(answer[1:].strip())
else:
answers.append(answer)
if correct_answers:
questions.append({
'question': question,
'answers': answers + correct_answers,
'correct_answers': correct_answers
})
return questions
# Quiz route
@portalfejlesztes_net_ben.route('/')
@portalfejlesztes_net_ben.route('/quiz', methods=['GET', 'POST'])
def quiz():
# If questions are not in session, parse and store them
if 'quiz_questions' not in session:
questions = parse_questions()
quiz_questions = random.sample(questions, 20)
session['quiz_questions'] = quiz_questions
session['question_index'] = 0
session['answers'] = []
else:
quiz_questions = session['quiz_questions']
question_index = session.get('question_index', 0)
# If all questions have been answered, redirect to results
if question_index >= len(quiz_questions):
return redirect(url_for('portalfejlesztes_net_ben.result'))
current_question = quiz_questions[question_index]
random.shuffle(current_question['answers']) # Shuffle the answers
return render_template('quiz.html', question=current_question, question_index=question_index)
# Submit answer route
@portalfejlesztes_net_ben.route('/submit_answer', methods=['POST'])
def submit_answer():
user_answers = request.form.getlist('answer') # Get multiple answers if needed
question_index = int(request.form.get('question_index'))
# Append answers to the session
answers = session.get('answers', [])
answers.append(user_answers)
session['answers'] = answers
# Update the question index
question_index += 1
session['question_index'] = question_index
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
# Result route
@portalfejlesztes_net_ben.route('/result')
def result():
quiz_questions = session.get('quiz_questions', None)
answers = session.get('answers', None)
score = 0
mistakes = []
# Compare answers
for i, user_answer in enumerate(answers):
correct_answers = quiz_questions[i]['correct_answers']
# If the user's answer matches the correct answer
if set(user_answer) == set(correct_answers):
score += 1
else:
mistakes.append({
'question': quiz_questions[i]['question'],
'correct_answer': correct_answers,
'user_answer': user_answer
})
questions_with_answers = zip(quiz_questions, answers)
return render_template('result.html', score=score, total=len(quiz_questions), mistakes=mistakes, questions_with_answers=questions_with_answers)
# Restart route
@portalfejlesztes_net_ben.route('/restart')
def restart():
session.pop('question_index', None)
session.pop('answers', None)
session.pop('quiz_questions', None)
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
# All questions route (show all questions)
@portalfejlesztes_net_ben.route('/allquestions')
def allquestions():
questions = parse_questions()
return render_template('allquestions.html', questions=questions)

View File

@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portálfejlesztés .Net Quiz All</title>
<link rel="shortcut icon" href="{{ url_for('static', filename='images/home/logo.jpg') }}" type="image/x-icon">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(to right, #5a0fb8, #1f65d6);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
overflow-x: hidden;
}
.container {
background-color: #ffffff;
width: 90%;
max-width: 1200px;
background: rgba(255, 255, 255, 0.2);
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
justify-content: space-between;
transition: transform 0.3s ease, box-shadow 0.3s ease;
height: fit-content;
}
h1 {
text-align: center;
color: #00ff08;
margin-bottom: 20px;
}
h2 {
margin-top: 20px;
font-size: 1.5em;
color: #e5e5e5;
}
p {
font-size: 1.1em;
color: #dcdcdc;
}
ul {
list-style: none;
padding-left: 0;
margin-bottom: 20px;
}
li {
background: linear-gradient(to right, rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.7));
padding: 15px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
margin-bottom: 12px;
word-wrap: break-word;
}
li strong {
font-weight: bold;
}
.correct-answer {
color: #4CAF50;
}
.user-answer {
color: #FF5722;
}
.mistake-item {
background-color: #ff6c82;
border: 1px solid #ff1e35;
}
.no-mistakes {
text-align: center;
font-size: 1.2em;
color: #4CAF50;
}
a {
display: block;
text-align: center;
margin-top: 20px;
padding: 10px 20px;
background-color: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
font-size: 1.1em;
}
a:hover {
background-color: #45a049;
}
.button-container {
display: flex;
justify-content: center;
margin-top: 20px;
gap: 10px;
}
.action-button {
padding: 12px 20px;
background-color: #3498db;
color: white;
border: none;
border-radius: 8px;
font-size: 1.2em;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 1px;
transition: background-color 0.3s ease, transform 0.2s ease;
width: 48%;
}
.action-button:hover {
background-color: #2980b9;
transform: scale(1.05);
}
.action-button:active {
transform: scale(0.98);
}
.restart-button {
background: linear-gradient(to right, #80e27e, #66c466);
}
.exit-button {
background: linear-gradient(to right, #ff8a80, #ff5252);
}
</style>
</head>
<body>
<div class="container">
<h1>Programozás .Net ben</h1>
<p>Here are all the questions that will appear in the quiz!</p>
<ul>
{% for question in questions %}
<li>
<strong>{{ question['question'] }}</strong><br>
{% for correct in question['correct_answers'] %}
<p>{{ correct }}</p>
{% endfor %}
</li>
{% endfor %}
</ul>
<div class="button-container">
<a href="{{ url_for('uni') }}" class="action-button">Exit to Home</a>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portalfejlesztes .Net ben Quiz</title>
<link rel="shortcut icon" href="{{ url_for('static', filename='images/home/logo.jpg') }}" type="image/x-icon">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(to right, #5a0fb8, #1f65d6);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
overflow-x: hidden;
}
.container {
background: rgba(255, 255, 255, 0.2);
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
flex: 1 1 calc(33.333% - 20px);
max-width: calc(33.333% - 20px);
transform: scale(1);
transition: transform 0.3s ease-in-out;
}
h1 {
text-align: center;
font-size: 2.2em;
margin-bottom: 20px;
}
.question {
margin-bottom: 20px;
font-size: 1.3em;
font-weight: 600;
}
.answer-options {
margin-top: 15px;
}
.answer-options label {
display: block;
position: relative;
background: linear-gradient(to right, #5a0fb8, #1f65d6);
padding: 10px 15px;
margin-bottom: 10px;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.answer-options label:hover {
background: linear-gradient(to right, #1f65d6, #5a0fb8);
color: white;
transform: translateX(5px);
}
.answer-options input {
display: none;
}
.answer-options input:checked + label {
background: linear-gradient(to right, #5a0fb8, #2ecc71);
color: white;
border: 2px solid #27ae60;
}
.submit-button, .quit-button {
display: block;
width: 100%;
padding: 12px;
color: white;
border: none;
border-radius: 8px;
font-size: 1.2em;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 1px;
transition: background-color 0.3s ease, transform 0.2s ease;
margin-top: 15px;
text-align: center;
}
.submit-button {
background: linear-gradient(to right, #80e27e, #66c466);
}
.quit-button {
background: linear-gradient(to right, #ff8a80, #ff5252);
}
.submit-button:hover, .quit-button:hover {
transform: scale(1.05);
}
.submit-button:active, .quit-button:active {
transform: scale(0.98);
}
.submit-button:hover, .quit-button:hover {
transform: scale(1.05);
}
.submit-button:active, .quit-button:active {
transform: scale(0.98);
}
</style>
</head>
<body>
<div class="container">
<h1>Question {{ question_index + 1 }} / 20</h1>
<p class="question">{{ question['question'] }}</p>
<form method="POST" action="{{ url_for('portalfejlesztes_net_ben.submit_answer') }}">
<div class="answer-options">
{% for answer in question['answers'] %}
<input type="checkbox" id="answer_{{ loop.index }}" name="answer" value="{{ answer }}">
<label for="answer_{{ loop.index }}">
{{ answer }}
</label>
{% endfor %}
</div>
<input type="hidden" name="question_index" value="{{ question_index }}">
<input type="submit" value="Next" class="submit-button">
</form>
<form method="GET" action="{{ url_for('portalfejlesztes_net_ben.result') }}">
<button type="submit" class="submit-button quit-button">Quit</button>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,180 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portálfejlesztés .Net ben Quiz Results</title>
<link rel="shortcut icon" href="{{ url_for('static', filename='images/home/logo.jpg') }}" type="image/x-icon">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(to right, #5a0fb8, #1f65d6);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
overflow-x: hidden;
}
.container {
background-color: #ffffff;
width: 90%;
max-width: 1200px;
background: rgba(255, 255, 255, 0.2);
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
justify-content: space-between;
transition: transform 0.3s ease, box-shadow 0.3s ease;
height: fit-content;
}
h1 {
text-align: center;
color: #00ff08;
margin-bottom: 20px;
}
h2 {
margin-top: 20px;
font-size: 1.5em;
}
p {
font-size: 1.1em;
}
ul {
list-style: none;
padding-left: 0;
}
li {
background: linear-gradient(to right, rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.7));
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
margin-bottom: 10px;
word-wrap: break-word;
}
li strong {
font-weight: bold;
}
.correct-answer {
color: #4CAF50;
}
.user-answer {
color: #FF5722;
}
.mistake-item {
background-color: #ff6c82;
border: 1px solid #ff1e35;
}
.no-mistakes {
text-align: center;
font-size: 1.2em;
color: #4CAF50;
}
a {
display: block;
text-align: center;
margin-top: 20px;
padding: 10px 20px;
background-color: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
font-size: 1.1em;
}
a:hover {
background-color: #45a049;
}
.button-container {
display: flex;
justify-content: center;
margin-top: 20px;
gap: 10px;
}
.action-button {
padding: 12px 20px;
background-color: #3498db;
color: white;
border: none;
border-radius: 8px;
font-size: 1.2em;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 1px;
transition: background-color 0.3s ease, transform 0.2s ease;
width: 48%;
}
.action-button:hover {
background-color: #2980b9;
transform: scale(1.05);
}
.action-button:active {
transform: scale(0.98);
}
.restart-button {
background: linear-gradient(to right, #80e27e, #66c466);
}
.exit-button {
background: linear-gradient(to right, #ff8a80, #ff5252);
}
</style>
</head>
<body>
<div class="container">
<h1>Quiz Results</h1>
<p><strong>Score:</strong> {{ score }} out of {{ total }}</p>
<h2>Mistakes</h2>
{% if mistakes %}
<ul>
{% for mistake in mistakes %}
<li class="mistake-item">
<strong>Question:</strong> {{ mistake.question }}<br>
<strong class="user-answer">Your Answer:</strong> {{ mistake.user_answer }}<br>
<strong class="correct-answer">Correct Answer:</strong> {{ mistake.correct_answer }}<br>
</li>
{% endfor %}
</ul>
{% else %}
<p class="no-mistakes">No mistakes!</p>
{% endif %}
<h2>All Answers</h2>
<ul>
{% for question, answer in questions_with_answers %}
<li>
<strong>{{ question['question'] }}</strong><br>
<strong class="user-answer">Your Answer:</strong> {{ answer }}<br>
<strong class="correct-answer">Correct Answer:</strong> {{ question['correct_answers'] }}<br>
</li>
{% endfor %}
</ul>
<div class="button-container">
<a href="{{ url_for('uni') }}" class="exit-button action-button">Exit to Home</a>
<a href="{{ url_for('portalfejlesztes_net_ben.restart') }}" class="restart-button action-button">Restart Quiz</a>
</div>
</div>
</body>
</html>