ub3 + ub3-dekorator

This commit is contained in:
TD589 2025-04-04 15:41:50 +02:00
parent 80e78d071e
commit 15d91b40d1
14 changed files with 258 additions and 1 deletions

View File

@ -6,4 +6,6 @@ app = Flask(__name__)
def home():
return render_template('index.html')
app.run(host='0.0.0.0', port=5007)
app.run(host='0.0.0.0', port=5007, debug=True)

View File

@ -0,0 +1,27 @@
from flask import Flask, render_template
import mitarbeiter
app = Flask(__name__)
@app.route('/')
def startseite():
return render_template('index.html',
mycontent=mitarbeiter.GibAlleMitarbeiter(mitarbeiter.mitarbeiterliste))
@app.route('/mitarbeiter1')
def show1():
return render_template('index.html', mycontent=mitarbeiter.GibMitarbeiter(mitarbeiter.mitarbeiter1))
@app.route('/mitarbeiter2')
def show2():
return render_template('index.html', mycontent=mitarbeiter.GibMitarbeiter(mitarbeiter.mitarbeiter2))
@app.route('/mitarbeiter3')
def show3():
return render_template('index.html', mycontent=mitarbeiter.GibMitarbeiter(mitarbeiter.mitarbeiter3))
@app.route('/mitarbeiter')
def show_all():
return render_template('index.html', mycontent=mitarbeiter.GibAlleMitarbeiter(mitarbeiter.mitarbeiterliste))
app.run(host='0.0.0.0', port=5007)

View File

@ -0,0 +1,32 @@
#! /usr/bin/python3
mitarbeiter1 = ['Otto', 'Müller', 'Adlergestell 700', '12527 Berlin', '03067549000']
mitarbeiter2 = ['Hans', 'Lindner', 'Friedenstraße 4', '10464 Wildau', '03375 23925']
mitarbeiter3 = ['Eva', 'Habeck', 'Seestraße 5', '10430 Wildau', '03375 45321']
mitarbeiterliste= [mitarbeiter1, mitarbeiter2, mitarbeiter3]
for m in mitarbeiterliste:
print('Vorname: ' + m[0])
print('Nachname: ' + m[1])
print('Straße: ' + m[2])
print('PLZ Ort: ' + m[3])
print('Telefonnr.: ' + m[4])
print('-----------------------------')
def GibMitarbeiter(mitarbeiter):
string = f"<span id='vorname'>Vorname: {mitarbeiter[0]}</span><br>"
string += f"Nachname: {mitarbeiter[1]}<br>"
string += f"Straße: {mitarbeiter[2]}<br>"
string += f"Ort: {mitarbeiter[3]}<br>"
string += f"Telefon: {mitarbeiter[4]}<br><br>"
return string
def GibAlleMitarbeiter(liste):
text = ""
for m in liste:
text += GibMitarbeiter(m)
return text
if __name__ == '__main__':
print(GibMitarbeiter(mitarbeiter1))
print(GibAlleMitarbeiter(mitarbeiterliste))

View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Mitarbeiterliste</title>
<style>
body {
font-family: Verdana, Arial, sans-serif;
font-size: 87.5%;
background-color: AliceBlue;
}
h1 {
color: Indigo;
}
#vorname {
color: green;
}
footer {
margin-top: 40px;
font-size: 0.9em;
color: gray;
}
</style>
</head>
<body>
<h1>Mitarbeiterliste</h1>
<p>{{ mycontent | safe }}</p>
<footer>
Autor: Butenhoff <a href="mailto: tobu6289@thwildau.de">tobu6289@th-wildau.de</a>
</footer>
</body>
</html>

Binary file not shown.

Binary file not shown.

19
ub2_pro/app.py Normal file
View File

@ -0,0 +1,19 @@
# app.py
from flask import Flask, render_template
import mitarbeiter
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html", mitarbeiterliste=mitarbeiter.alle_mitarbeiter)
@app.route('/detail/<int:mid>')
def mitarbeiter_detail(mid):
person = mitarbeiter.get_mitarbeiter_by_id(mid)
if person:
return render_template("detail.html", mitarbeiter=person)
return "<h2>Mitarbeiter nicht gefunden.</h2>", 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

26
ub2_pro/mitarbeiter.py Normal file
View File

@ -0,0 +1,26 @@
# mitarbeiter.py
class Mitarbeiter:
def __init__(self, id, vorname, nachname, strasse, ort, telefon, bildpfad):
self.id = id
self.vorname = vorname
self.nachname = nachname
self.strasse = strasse
self.ort = ort
self.telefon = telefon
self.bildpfad = bildpfad
# Beispielhafte Mitarbeiter
m1 = Mitarbeiter(1, "Otto", "Müller", "Adlergestell 700", "12527 Berlin", "030 67549000", "/static/images/otto.jpeg")
m2 = Mitarbeiter(2, "Hans", "Lindner", "Friedenstraße 4", "10464 Wildau", "03375 23925", "/static/images/hans.jpeg")
m3 = Mitarbeiter(3, "Eva", "Habeck", "Seestraße 5", "10430 Wildau", "03375 45321", "/static/images/eva.jpeg")
# Liste mit allen
alle_mitarbeiter = [m1, m2, m3]
# Mitarbteiter mit ID 1
def get_mitarbeiter_by_id(mid):
for m in alle_mitarbeiter:
if m.id == mid:
return m
return None

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Details {{ mitarbeiter.vorname }} {{ mitarbeiter.nachname }}</title>
<style>
body {
font-family: Verdana, Arial, sans-serif;
background-color: AliceBlue;
padding: 20px;
}
.mitarbeiter-detail {
background-color: white;
padding: 20px;
border-radius: 8px;
width: 400px;
box-shadow: 0 0 8px rgba(0,0,0,0.1);
}
img {
max-width: 100%;
border-radius: 50%;
}
a {
color: darkblue;
text-decoration: none;
}
</style>
</head>
<body>
<a href="/">← Zurück zur Übersicht</a>
<div class="mitarbeiter-detail">
<img src="{{ mitarbeiter.bildpfad }}" alt="Profilbild">
<h2>{{ mitarbeiter.vorname }} {{ mitarbeiter.nachname }}</h2>
<p><strong>Straße:</strong> {{ mitarbeiter.strasse }}</p>
<p><strong>Ort:</strong> {{ mitarbeiter.ort }}</p>
<p><strong>Telefon:</strong> {{ mitarbeiter.telefon }}</p>
</div>
</body>
</html>

View File

@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Mitarbeiterliste</title>
<style>
body {
font-family: Verdana, Arial, sans-serif;
background-color: AliceBlue;
}
.mitarbeiter {
border: 1px solid lightgray;
border-radius: 10px;
background-color: white;
padding: 15px;
margin: 15px;
display: inline-block;
width: 250px;
vertical-align: top;
box-shadow: 2px 2px 6px rgba(0,0,0,0.1);
}
.mitarbeiter img {
max-width: 100%;
border-radius: 50%;
}
footer {
margin-top: 40px;
font-size: 0.9em;
color: gray;
}
</style>
</head>
<body>
<h1>Mitarbeiterliste</h1>
{% for m in mitarbeiterliste %}
<div class="mitarbeiter">
<a href="/detail/{{ m.id }}">
<img src="{{ m.bildpfad }}" alt="Profilbild von {{ m.vorname }}" width="150" height="150">
</a>
<p><strong>{{ m.vorname }} {{ m.nachname }}</strong></p>
<p>{{ m.strasse }}</p>
<p>{{ m.ort }}</p>
<p>{{ m.telefon }}</p>
</div>
{% endfor %}
<footer>
Autor: Butenhoff <a href="mailto:tobu6289@th-wildau.de">tobu6289@th-wildau.de</a>
</footer>
</body>
</html>

View File

@ -0,0 +1,27 @@
def call_limit(max_calls):
"""Ein Dekorator, der nur eine bestimmte Anzahl von Funktionsaufrufen erlaubt."""
def decorator(func):
count = 0 # Zähler für die Aufrufe
def wrapper(*args, **kwargs):
nonlocal count # Zugriff auf äußeren Zähler
if count < max_calls:
count += 1
return func(*args, **kwargs)
else:
print(f"Aufruflimit erreicht: {max_calls}x erlaubt.")
return wrapper
return decorator
# Anwendung des Dekorators
@call_limit(3)
def say_hello():
print("Hello world!")
# Testaufrufe
if __name__ == '__main__':
say_hello() # 1. Aufruf
say_hello() # 2. Aufruf
say_hello() # 3. Aufruf
say_hello() # 4. Aufruf → wird geblockt, habs getestet :P