Main site structure with first uni quiz
This commit is contained in:
38
main.py
Normal file
38
main.py
Normal file
@ -0,0 +1,38 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for, session, Blueprint
|
||||
from portalfejlesztes_net_ben import portalfejlesztes_net_ben
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = 'your_secret_key'
|
||||
|
||||
@app.route('/')
|
||||
@app.route('/home')
|
||||
def home():
|
||||
return render_template('home.html')
|
||||
|
||||
@app.route('/about')
|
||||
def about():
|
||||
return render_template('about.html')
|
||||
|
||||
@app.route('/uni')
|
||||
def uni():
|
||||
return render_template('uni/uni.html')
|
||||
|
||||
@app.route('/projects')
|
||||
def projects():
|
||||
return render_template('projects.html')
|
||||
|
||||
@app.route('/git')
|
||||
def git():
|
||||
return render_template('git.html')
|
||||
|
||||
|
||||
# Register the blueprint with a URL prefix
|
||||
app.register_blueprint(portalfejlesztes_net_ben, url_prefix='/uni/portalfejlesztes_net_ben')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
|
||||
|
||||
app.run(host='192.168.2.182', port=5000)
|
119
portalfejlesztes_net_ben/__init__.py
Normal file
119
portalfejlesztes_net_ben/__init__.py
Normal file
@ -0,0 +1,119 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for, session, Blueprint
|
||||
import os
|
||||
import random
|
||||
|
||||
TEXTFILES = ["./portalfejlesztes_net_ben/kerdessor1_manual.txt", "./portalfejlesztes_net_ben/kerdessor2_manual.txt", "./portalfejlesztes_net_ben/kerdessor3.txt"]
|
||||
|
||||
portalfejlesztes_net_ben = Blueprint(
|
||||
'portalfejlesztes_net_ben',
|
||||
__name__,
|
||||
template_folder='templates' # Ensure this matches the folder location
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
@portalfejlesztes_net_ben.route('/')
|
||||
@portalfejlesztes_net_ben.route('/quiz', methods=['GET', 'POST'])
|
||||
def quiz():
|
||||
if 'selected_questions' not in session:
|
||||
questions = parse_questions()
|
||||
selected_questions = random.sample(questions, 20)
|
||||
session['selected_questions'] = selected_questions
|
||||
session['question_index'] = 0
|
||||
session['answers'] = []
|
||||
else:
|
||||
selected_questions = session['selected_questions']
|
||||
|
||||
question_index = session.get('question_index', 0)
|
||||
|
||||
if question_index >= len(selected_questions):
|
||||
return redirect(url_for('portalfejlesztes_net_ben.result'))
|
||||
|
||||
current_question = selected_questions[question_index]
|
||||
random.shuffle(current_question['answers'])
|
||||
|
||||
return render_template('quiz.html', question=current_question, question_index=question_index)
|
||||
|
||||
@portalfejlesztes_net_ben.route('/submit_answer', methods=['POST'])
|
||||
def submit_answer():
|
||||
user_answers = request.form.getlist('answer')
|
||||
question_index = int(request.form.get('question_index'))
|
||||
|
||||
answers = session.get('answers', [])
|
||||
answers.append(user_answers)
|
||||
session['answers'] = answers
|
||||
|
||||
question_index += 1
|
||||
session['question_index'] = question_index
|
||||
|
||||
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
|
||||
|
||||
@portalfejlesztes_net_ben.route('/result')
|
||||
def result():
|
||||
selected_questions = session.get('selected_questions', None)
|
||||
answers = session.get('answers', None)
|
||||
|
||||
score = 0
|
||||
mistakes = []
|
||||
|
||||
for i, user_answer in enumerate(answers):
|
||||
correct_answers = selected_questions[i]['correct_answers']
|
||||
|
||||
if set(user_answer) == set(correct_answers):
|
||||
score += 1
|
||||
else:
|
||||
mistakes.append({
|
||||
'question': selected_questions[i]['question'],
|
||||
'correct_answer': correct_answers,
|
||||
'user_answer': user_answer
|
||||
})
|
||||
|
||||
questions_with_answers = zip(selected_questions, answers)
|
||||
|
||||
session.pop('question_index', None)
|
||||
session.pop('answers', None)
|
||||
session.pop('selected_questions', None)
|
||||
|
||||
return render_template('result.html', score=score, total=len(selected_questions), mistakes=mistakes, questions_with_answers=questions_with_answers)
|
||||
|
||||
@portalfejlesztes_net_ben.route('/restart')
|
||||
def restart():
|
||||
session.pop('question_index', None)
|
||||
session.pop('answers', None)
|
||||
session.pop('selected_questions', None)
|
||||
|
||||
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
|
||||
|
||||
@portalfejlesztes_net_ben.route('/allquestions')
|
||||
def allquestions():
|
||||
questions = parse_questions()
|
||||
|
||||
return render_template('allquestions.html', questions=questions)
|
BIN
portalfejlesztes_net_ben/__pycache__/__init__.cpython-313.pyc
Normal file
BIN
portalfejlesztes_net_ben/__pycache__/__init__.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
portalfejlesztes_net_ben/__pycache__/views.cpython-313.pyc
Normal file
BIN
portalfejlesztes_net_ben/__pycache__/views.cpython-313.pyc
Normal file
Binary file not shown.
132
portalfejlesztes_net_ben/kerdessor1_manual.txt
Normal file
132
portalfejlesztes_net_ben/kerdessor1_manual.txt
Normal 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
|
131
portalfejlesztes_net_ben/kerdessor2_manual.txt
Normal file
131
portalfejlesztes_net_ben/kerdessor2_manual.txt
Normal 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
|
84
portalfejlesztes_net_ben/kerdessor3.txt
Normal file
84
portalfejlesztes_net_ben/kerdessor3.txt
Normal 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.
|
159
portalfejlesztes_net_ben/templates/allquestions.html
Normal file
159
portalfejlesztes_net_ben/templates/allquestions.html
Normal file
@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Quiz Results</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background: linear-gradient(to right, #6a11cb, #2575fc);
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: #ffffff;
|
||||
width: 90%;
|
||||
max-width: 900px;
|
||||
padding: 30px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
overflow-y: auto;
|
||||
max-height: 90vh;
|
||||
}
|
||||
.container::-webkit-scrollbar{
|
||||
display: none;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
color: #4CAF50;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333;
|
||||
margin-top: 20px;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
background-color: #f9f9f9;
|
||||
border: 1px solid #ddd;
|
||||
padding: 15px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 8px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
li strong {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.correct-answer {
|
||||
color: #4CAF50;
|
||||
}
|
||||
|
||||
.user-answer {
|
||||
color: #FF5722;
|
||||
}
|
||||
|
||||
.mistake-item {
|
||||
background-color: #FFEBEE;
|
||||
border: 1px solid #FFCDD2;
|
||||
}
|
||||
|
||||
.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);
|
||||
}
|
||||
</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'] %}
|
||||
<ul>
|
||||
<li><strong class="correct-answer">{{correct}}</strong></li>
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<div class="button-container">
|
||||
<a href="{{ url_for('uni') }}" class="action-button">Exit to Home</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
130
portalfejlesztes_net_ben/templates/quiz.html
Normal file
130
portalfejlesztes_net_ben/templates/quiz.html
Normal file
@ -0,0 +1,130 @@
|
||||
<!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>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background: linear-gradient(to right, #6a11cb, #2575fc);
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 600px;
|
||||
background-color: white;
|
||||
padding: 30px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
|
||||
transform: scale(1);
|
||||
transition: transform 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
color: #2C3E50;
|
||||
font-size: 2.2em;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.question {
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.3em;
|
||||
font-weight: 600;
|
||||
color: #34495e;
|
||||
}
|
||||
|
||||
.answer-options {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.answer-options label {
|
||||
display: block;
|
||||
position: relative;
|
||||
background: #ecf0f1;
|
||||
padding: 10px 15px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.answer-options label:hover {
|
||||
background: #3498db;
|
||||
color: white;
|
||||
transform: translateX(5px);
|
||||
}
|
||||
|
||||
.answer-options input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.answer-options input:checked + label {
|
||||
background: #2ecc71;
|
||||
color: white;
|
||||
border: 2px solid #27ae60;
|
||||
}
|
||||
|
||||
.submit-button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 12px;
|
||||
background-color: #e74c3c;
|
||||
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;
|
||||
}
|
||||
|
||||
.submit-button:hover {
|
||||
background-color: #c0392b;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.submit-button:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.quit-button {
|
||||
background-color: #95a5a6;
|
||||
}
|
||||
|
||||
.quit-button:hover {
|
||||
background-color: #7f8c8d;
|
||||
}
|
||||
</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>
|
173
portalfejlesztes_net_ben/templates/result.html
Normal file
173
portalfejlesztes_net_ben/templates/result.html
Normal file
@ -0,0 +1,173 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Quiz Results</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background: linear-gradient(to right, #6a11cb, #2575fc);
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: #ffffff;
|
||||
width: 90%;
|
||||
max-width: 900px;
|
||||
padding: 30px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
overflow-y: auto;
|
||||
max-height: 90vh;
|
||||
}
|
||||
.container::-webkit-scrollbar{
|
||||
display: none;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
color: #4CAF50;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333;
|
||||
margin-top: 20px;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
background-color: #f9f9f9;
|
||||
border: 1px solid #ddd;
|
||||
padding: 15px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 8px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
li strong {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.correct-answer {
|
||||
color: #4CAF50;
|
||||
}
|
||||
|
||||
.user-answer {
|
||||
color: #FF5722;
|
||||
}
|
||||
|
||||
.mistake-item {
|
||||
background-color: #FFEBEE;
|
||||
border: 1px solid #FFCDD2;
|
||||
}
|
||||
|
||||
.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);
|
||||
}
|
||||
</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('portalfejlesztes_net_ben.restart') }}" class="action-button">Restart Quiz</a>
|
||||
<a href="{{ url_for('uni') }}" class="action-button">Exit to Home</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
220
static/css/main.css
Normal file
220
static/css/main.css
Normal file
@ -0,0 +1,220 @@
|
||||
/* General Reset */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
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 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 90%;
|
||||
max-width: 1200px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
/* Header Section */
|
||||
.header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
|
||||
.header .brand {
|
||||
font-family: 'Lucida Handwriting', cursive;
|
||||
font-size: 2rem;
|
||||
background: linear-gradient(to right, #5a0fb8, #1f65d6);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
.header .name {
|
||||
font-size: 1.2rem;
|
||||
color: #ccc;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header nav {
|
||||
display: flex;
|
||||
margin-top: 15px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.header nav a {
|
||||
position: relative;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-size: 1rem;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
padding: 12px 30px;
|
||||
display: inline-block;
|
||||
clip-path: polygon(15% 0, 100% 0, 85% 100%, 0 100%);
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
text-align: center;
|
||||
margin-right: -15px;
|
||||
width: 10ch;
|
||||
}
|
||||
|
||||
.header nav a:hover {
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
border-color: rgba(255, 255, 255, 0.5);
|
||||
color: #5a0fb8;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.header nav {
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.header nav a {
|
||||
margin-right: -15px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Section */
|
||||
.main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 40px 20px;
|
||||
gap: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.main .intro {
|
||||
font-size: 1.3rem;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 20px;
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
.main .quote {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: 2rem;
|
||||
font-style: italic;
|
||||
color: #fff;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.main .author {
|
||||
font-size: 1.2rem;
|
||||
margin-top: 10px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.main .card-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.main .card {
|
||||
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);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.main .card:hover {
|
||||
transform: translateY(-10px);
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.main .card img {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
object-fit: cover;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.main .card h3 {
|
||||
margin-bottom: 5px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.main .card .date {
|
||||
font-size: 0.9rem;
|
||||
color: #ccc;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.main .card p {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.4;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.main .card a {
|
||||
display: inline-block;
|
||||
margin-top: 10px;
|
||||
padding: 10px 15px;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
border-radius: 8px;
|
||||
background: linear-gradient(to right, #5a0fb8, #1f65d6);
|
||||
transition: background 0.3s ease;
|
||||
}
|
||||
|
||||
.main .card a:hover {
|
||||
background: linear-gradient(to right, #1f65d6, #5a0fb8);
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.main .card {
|
||||
flex: 1 1 calc(50% - 20px);
|
||||
max-width: calc(50% - 20px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.main .card {
|
||||
flex: 1 1 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Footer Section */
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #5a0fb8;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
BIN
static/images/uni/portalfejlesztes-logo.png
Normal file
BIN
static/images/uni/portalfejlesztes-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
1
templates/about.html
Normal file
1
templates/about.html
Normal file
@ -0,0 +1 @@
|
||||
{% extends "main.html" %}
|
1
templates/git.html
Normal file
1
templates/git.html
Normal file
@ -0,0 +1 @@
|
||||
{% extends "main.html" %}
|
35
templates/home.html
Normal file
35
templates/home.html
Normal file
@ -0,0 +1,35 @@
|
||||
{% extends "main.html" %}
|
||||
{% block content %}
|
||||
<main class="main">
|
||||
<div class="intro">
|
||||
Welcome to my portfolio! I'm a passionate Computer Science Engineer dedicated to crafting innovative and efficient digital solutions.
|
||||
Feel free to explore my projects, read my blogs, and learn more about me and my work.
|
||||
</div>
|
||||
<div class="quote">"Programs must be written for people to read, and only incidentally for machines to execute."</div>
|
||||
<div class="author">– Harold Abelson</div>
|
||||
<div class="card-container">
|
||||
<div class="card">
|
||||
<img src="profile.jpg" alt="Post Image">
|
||||
<h3>Post Title 1</h3>
|
||||
<div class="date">January 5, 2025</div>
|
||||
<p>Explore the basics of computer science and its applications in the modern world.</p>
|
||||
<a href="#post1">Read More</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<img src="profile.jpg" alt="Post Image">
|
||||
<h3>Post Title 2</h3>
|
||||
<div class="date">January 6, 2025</div>
|
||||
<p>Dive into advanced programming concepts and learn the secrets of clean code.</p>
|
||||
<a href="#post2">Read More</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<img src="profile.jpg" alt="Post Image">
|
||||
<h3>Post Title 3</h3>
|
||||
<div class="date">January 7, 2025</div>
|
||||
<p>Discover the latest trends in AI and machine learning and their impact on society.</p>
|
||||
<a href="#post3">Read More</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{% endblock %}
|
33
templates/main.html
Normal file
33
templates/main.html
Normal file
@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>My Portfolio</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<!-- Header Section -->
|
||||
<header class="header">
|
||||
<div class="brand">Computer Science Engineer</div>
|
||||
<div class="name">Máté Gosztolya's personal website</div>
|
||||
<nav>
|
||||
<a href="{{ url_for('home') }}">Home</a>
|
||||
<a href="{{ url_for('git') }}">Git</a>
|
||||
<a href="{{ url_for('projects') }}">Projects</a>
|
||||
<a href="{{ url_for('uni') }}">UNI</a>
|
||||
<a href="{{ url_for('about') }}">About</a>
|
||||
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
<footer class="footer">
|
||||
© 2025 Máté Gosztolya's Portfolio. All rights reserved. | <a href="#contact">Get in Touch</a>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1
templates/projects.html
Normal file
1
templates/projects.html
Normal file
@ -0,0 +1 @@
|
||||
{% extends "main.html" %}
|
54
templates/uni/uni.html
Normal file
54
templates/uni/uni.html
Normal file
@ -0,0 +1,54 @@
|
||||
{% extends "main.html" %}
|
||||
{% block content%}
|
||||
<style>
|
||||
.card-buttons {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.card-buttons .btn {
|
||||
padding: 12px 24px;
|
||||
font-size: 1rem;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
text-transform: uppercase;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.3s ease, background 0.3s ease;
|
||||
width: 100%;
|
||||
max-width: 160px;
|
||||
}
|
||||
|
||||
.card-buttons .btn {
|
||||
background: linear-gradient(to right, #5a0fb8, #1f65d6);
|
||||
}
|
||||
|
||||
.card-buttons .btn:hover {
|
||||
background: linear-gradient(to right, #1f65d6, #5a0fb8);
|
||||
transform: scale(1.05);
|
||||
}
|
||||
</style>
|
||||
<main class="main">
|
||||
<div class="card">
|
||||
<img src="{{ url_for('static', filename='images/uni/portalfejlesztes-logo.png')}}" alt="Post Image">
|
||||
<h3>Portálfejlesztés .Net ben</h3>
|
||||
<div class="date">January 10, 2025</div>
|
||||
<p>
|
||||
This test is made for SZE University students to practice. Be aware that the test might become outdated
|
||||
as the course material may change in the future. In case of modifications or incorrect answers, please contact me!
|
||||
</p>
|
||||
<div class="card-buttons">
|
||||
<form method="GET" action="{{ url_for('portalfejlesztes_net_ben.allquestions') }}">
|
||||
<button class="btn display-questions" type="submit">Display Questions</button>
|
||||
</form>
|
||||
<form method="POST" action="{{ url_for('portalfejlesztes_net_ben.quiz') }}">
|
||||
<button class="btn start-quiz" type="submit">Start Quiz</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{% endblock %}
|
Reference in New Issue
Block a user