Variante mit POST-REQUESTS ergänzt und Dockerfiles auf POST umgestellt

This commit is contained in:
2023-11-13 17:58:42 +01:00
parent 4107a930b6
commit 419833a9c4
28 changed files with 639 additions and 30 deletions

98
.idea/workspace.xml generated
View File

@@ -4,13 +4,36 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="3fdfc273-527d-4717-bd6d-4ba98fba7555" name="Changes" comment="pip-Kommentar in .py gekürzt">
<list default="true" id="3fdfc273-527d-4717-bd6d-4ba98fba7555" name="Changes" comment="Variante mit POST-REQUESTS ergänzt und Dockerfiles auf POST umgestellt">
<change afterPath="$PROJECT_DIR$/app/GET-Flask-QR.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/base.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/cal.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/geo.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/mail.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/mecard.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/qr.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/tel.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/text.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/url.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/vcard.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/post-templates/wifi.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Flask-QR.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Flask-QR.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/static/favicon.ico" beforeDir="false" afterPath="$PROJECT_DIR$/app/qr-static/favicon.ico" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/static/style.css" beforeDir="false" afterPath="$PROJECT_DIR$/app/qr-static/style.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/templates/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/qr.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/templates/qr.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dockerfile" beforeDir="false" afterPath="$PROJECT_DIR$/Dockerfile" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dockerfile-RasPi" beforeDir="false" afterPath="$PROJECT_DIR$/Dockerfile-RasPi" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Flask-QR.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Post-Flask-QR.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/base.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/base.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/cal.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/cal.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/geo.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/geo.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/mail.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/mail.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/mecard.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/mecard.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/qr.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/qr.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/tel.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/tel.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/text.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/text.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/url.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/url.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/vcard.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/vcard.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/wifi.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/get-templates/wifi.html" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -65,25 +88,26 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/tebarius/IdeaProjects/Docker-Flask-QR/app/templates&quot;,
&quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.keymap&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"DefaultHtmlFileTemplate": "HTML File",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
"ignore.virus.scanning.warn.message": "true",
"last_opened_file_path": "D:/mager/Documents/IntelliJ/Docker-Flask-QR/app/Post-Flask-QR.py",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.15",
"project.structure.side.proportion": "0.2",
"settings.editor.selected.configurable": "preferences.keymap"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR\app" />
<recent name="$PROJECT_DIR$/app/templates" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR\app\templates" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR\templates" />
</key>
<key name="MoveFile.RECENT_KEYS">
@@ -93,8 +117,8 @@
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR" />
</key>
</component>
<component name="RunManager" selected="Docker.Dockerfile-Raspi">
<configuration name="Flask-QR" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<component name="RunManager" selected="Python.Post-Flask-QR">
<configuration name="GET-Flask-QR" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="Docker-Flask-QR" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
@@ -107,7 +131,29 @@
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/Flask-QR.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/GET-Flask-QR.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="Post-Flask-QR" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="Docker-Flask-QR" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.12 (Docker-Flask-QR)" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/Post-Flask-QR.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@@ -125,7 +171,8 @@
<list>
<item itemvalue="Docker.Dockerfile-local" />
<item itemvalue="Docker.Dockerfile-Raspi" />
<item itemvalue="Python.Flask-QR" />
<item itemvalue="Python.GET-Flask-QR" />
<item itemvalue="Python.Post-Flask-QR" />
</list>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
@@ -244,7 +291,8 @@
<MESSAGE value="geo ergänzt" />
<MESSAGE value="geo.html verändert" />
<MESSAGE value="pip-Kommentar in .py gekürzt" />
<option name="LAST_COMMIT_MESSAGE" value="pip-Kommentar in .py gekürzt" />
<MESSAGE value="Variante mit POST-REQUESTS ergänzt und Dockerfiles auf POST umgestellt" />
<option name="LAST_COMMIT_MESSAGE" value="Variante mit POST-REQUESTS ergänzt und Dockerfiles auf POST umgestellt" />
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />

View File

@@ -12,4 +12,8 @@ RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 8002
CMD ["python", "Flask-QR.py"]
# with GET-REQUESTS
#CMD ["python", "GET-Flask-QR.py"]
# the same with POST-REQUESTS
CMD ["python", "Post-Flask-QR.py"]

View File

@@ -15,4 +15,8 @@ RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 8002
CMD ["python", "Flask-QR.py"]
# with GET-REQUESTS
#CMD ["python", "GET-Flask-QR.py"]
# the same with POST-REQUESTS
CMD ["python", "Post-Flask-QR.py"]

6
app/Flask-QR.py → app/GET-Flask-QR.py Executable file → Normal file
View File

@@ -4,7 +4,7 @@
from flask import Flask, render_template, request
from flask_qrcode import QRcode
app = Flask(__name__, static_folder='qr-static')
app = Flask(__name__, static_folder='qr-static', template_folder='get-templates')
QRcode(app)
@@ -104,7 +104,7 @@ def makeqr():
if request.args.get('nickname') != "":
data += f"NICKNAME:{request.args.get('nickname')};"
if request.args.get('gebdate') != "":
data += f"BDAY:{request.args.get('gebdate').replace('-','')};"
data += f"BDAY:{request.args.get('gebdate').replace('-', '')};"
if request.args.get('note') != "":
data += f"NOTE:{request.args.get('note')};"
elif request.args.get('type') == "vcard":
@@ -231,4 +231,4 @@ def makeqr():
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8002, debug=True)
app.run(host='0.0.0.0', port=8002)

234
app/Post-Flask-QR.py Normal file
View File

@@ -0,0 +1,234 @@
#!/usr/bin/env python3
# notwendige pakete via pip:
# pip install Flask-QRcode
from flask import Flask, render_template, request
from flask_qrcode import QRcode
app = Flask(__name__, static_folder='qr-static', template_folder='post-templates')
QRcode(app)
@app.route("/")
def index():
return render_template('index.html')
@app.route("/index.html")
def index_html():
return render_template('index.html')
@app.route("/text.html")
def text():
return render_template('text.html')
@app.route("/tel.html")
def tel():
return render_template('tel.html')
@app.route("/url.html")
def url():
return render_template('url.html')
@app.route("/vcard.html")
def vcard():
return render_template('vcard.html')
@app.route("/mecard.html")
def mecard():
return render_template('mecard.html')
@app.route("/geo.html")
def geo():
return render_template('geo.html')
@app.route("/mail.html")
def mail():
return render_template('mail.html')
@app.route("/wifi.html")
def wifi():
return render_template('wifi.html')
@app.route("/cal.html")
def cal():
return render_template('cal.html')
@app.route("/qr.html", methods=['POST'])
def makeqr():
data = "Sorry kein Inhalt!!!"
if request.form['type'] == "text":
data = request.form['text']
elif request.form['type'] == "url":
data = request.form['url']
elif request.form['type'] == "tel":
data = f"tel:{request.form['tel']}"
elif request.form['type'] == "geo":
data = "GEO:"
if request.form['ns'] == "S":
data += "-"
data += f"{request.form['nsk']},"
if request.form['we'] == "W":
data += "-"
data += f"{request.form['wek']}"
if request.form['high'] != "":
data += f",{request.form['high']}"
elif request.form['type'] == "mecard":
titel = request.form["titel"]
if titel != "":
titel += " "
data = (f"MECARD:N:{request.form['nname']},{titel}{request.form['vname']};"
f"ADR:{request.form['pbox']},{request.form['adresszusatz']},"
f"{request.form['strasse']},{request.form['ort']},{request.form['bland']},"
f"{request.form['plz']},{request.form['land']};")
if request.form['tel'] != "":
data += f"TEL:{request.form['tel']};"
if request.form['mail'] != "":
data += f"EMAIL:{request.form['mail']};"
if request.form['url'] != "":
data += f"URL:{request.form['url']};"
if request.form['tel'] != "":
data += f"TEL:{request.form['tel']};"
if request.form['nickname'] != "":
data += f"NICKNAME:{request.form['nickname']};"
if request.form['gebdate'] != "":
data += f"BDAY:{request.form['gebdate'].replace('-', '')};"
if request.form['note'] != "":
data += f"NOTE:{request.form['note']};"
elif request.form['type'] == "vcard":
# BEGIN:VCARD
# VERSION:3.0
# N:Nachname;Vorname;;Titel;
# FN:Titel Vorname Nachname
# ORG:Firma
# TITLE:Job-Titel(Funktion)
# ADR:Postfach;Adresszusatz;straße;stadt;Bundesland;plz;Land
# TEL;TYPE=VOICE,WORK:Telefon
# TEL;TYPE=CELL,WORK:Mobil
# TEL;TYPE=VOICE,HOME:Telefon
# TEL;TYPE=CELL,HOME:Mobil
# TEL;TYPE=FAX:Fax
# EMAIL;TYPE=WORK:E-Mail
# EMAIL;TYPE=HOME:E-Mail
# URL:website
# BDAY:--0203
# NICKNAME:spitzname
# END:VCARD
titel = request.form["titel"]
if titel != "":
titel += " "
data = (f"BEGIN:VCARD\nVERSION:3.0\nN:{request.form['nname']};"
f"{request.form['vname']};;{titel};\nFN:{titel}"
f"{request.form['vname']} {request.form['nname']}\n"
f"ADR:{request.form['pbox']};{request.form['adresszusatz']};"
f"{request.form['strasse']};{request.form['ort']};"
f"{request.form['bland']};{request.form['plz']};"
f"{request.form['land']}\n")
if request.form["org"] != "":
data += f"ORG:{request.form['org']}\n"
if request.form["jtitel"] != "":
data += f"TITLE:{request.form['jtitel']}\n"
if request.form["tel-a"] != "":
data += f"TEL;TYPE=VOICE,WORK:{request.form['tel-a']}\n"
if request.form["mobil-a"] != "":
data += f"TEL;TYPE=CELL,WORK:{request.form['mobil-a']}\n"
if request.form["tel-p"] != "":
data += f"TEL;TYPE=VOICE,HOME:{request.form['tel-p']}\n"
if request.form["mobil-p"] != "":
data += f"TEL;TYPE=CELL,HOME:{request.form['mobil-p']}\n"
if request.form["fax"] != "":
data += f"TEL;TYPE=FAX:{request.form['fax']}\n"
if request.form["mail-a"] != "":
data += f"EMAIL;TYPE=WORK:{request.form['mail-a']}\n"
if request.form["mail-p"] != "":
data += f"EMAIL;TYPE=HOME:{request.form['mail-p']}\n"
if request.form["url"] != "":
data += f"URL:{request.form['url']}\n"
if request.form["nickname"] != "":
data += f"NICKNAME:{request.form['nickname']}\n"
if request.form["gebdate"] != "":
gebdate = request.form['gebdate'].replace('-', '')
if request.form["ohneJahr"]:
data += f"BDAY:--{gebdate[4:]}\n"
else:
data += f"BDAY:{gebdate}\n"
data += "END:VCARD\n"
elif request.form['type'] == "wifi":
passw = (request.form["passw"].replace("\\", "\\\\").replace(";", "\\;")
.replace(",", "\\,").replace(":", "\\:").replace("\"", "\\\""))
ssid = (request.form["ssid"].replace("\\", "\\\\").replace(";", "\\;")
.replace(",", "\\,").replace(":", "\\:").replace("\"", "\\\""))
if request.form["auth"] == "WPA":
data = f'WIFI:T:WPA;S:"{ssid}";P:"{passw}"'
else:
data = f'WIFI:T:nopass;S:"{ssid}"'
if request.form["hidden"]:
data += "H:true;;"
else:
data += ";"
elif request.form['type'] == "cal":
# Format für Calendar (Zeilenumbrüche beachten!!):
# BEGIN:VEVENT
# SUMMARY:<titel>
# DESCRIPTION:<beschreibung>
# LOCATION:<Ort>
# DTSTART:20231114T090000
# DTEND:20231123T110000
# END:VEVENT
sdt = request.form['sdate'].replace('-', '')
if request.form['edate'] == "":
edt = sdt
else:
edt = request.form['edate'].replace('-', '')
if request.form['stime'] != "":
sdt += f"T{request.form['stime'].replace(':', '')}00"
if request.form['etime'] != "":
edt += f"T{request.form['etime'].replace(':', '')}00"
data = (f"BEGIN:VEVENT\nSUMMARY:{request.form['title']}\n"
f"DESCRIPTION: {request.form['description']}\n"
f"LOCATION:{request.form['location']}\n"
f"DTSTART:{sdt}\nDTEND:{edt}\n"
f"END:VEVENT")
elif request.form['type'] == "mail":
more = False
data = f"mailto:{request.form['mail']}"
if request.form['cc'] != "":
data += f"?cc={request.form['cc']}"
more = True
if request.form['bcc'] != "":
if more:
data += "&"
else:
data += "?"
more = True
data += f"bcc={request.form['bcc']}"
if request.form['subject'] != "":
if more:
data += "&"
else:
data += "?"
more = True
data += f"subject={request.form['subject']}"
if request.form['body'] != "":
if more:
data += "&"
else:
data += "?"
data += f"body={request.form['body']}"
return render_template('qr.html', data=data)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8002)

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>QR-Code-Generator</title>
<!--suppress HtmlUnknownTarget -->
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<!--suppress HtmlUnknownTarget -->
<link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon" />
</head>
<body>
<H1>QRCode-Generator</H1>
{% block inhalt %}
{% endblock %}
</body>
</html>

View File

@@ -0,0 +1,30 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Gebe bitte Details für deinen Termin ein!</label><br />
<input type="hidden" name="type" value="cal">
<label for="title">Titel:</label>
<input type="text" name="title" id="title" size="30" maxlength="60" required><br />
<label for="sdate">Start-Datum</label>
<input type="date" name="sdate" id="sdate" required><br />
<br />
<label><i><u>optionale Angaben:</u></i></label><br />
<label for="stime">Start-Zeit</label>
<input type="time" name="stime" id="stime"><br />
<label for="edate">End-Datum</label>
<input type="date" name="edate" id="edate"><br />
<label for="etime">End-Zeit</label>
<input type="time" name="etime" id="etime"><br />
<label for="location">Ort:</label>
<input type="text" name="location" id="location" size="30" maxlength="120"><br />
<label for="description">weitere Notizen:</label>
<input type="text" name="description" id="description" size="30" maxlength="180"><br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,36 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Bitte Koordinaten angeben<br />(Dezimale Gradangabe - Bsp. 51.2332)</label><br>
<input type="hidden" name="type" value="geo">
<label>
<input name="ns" type="radio" value="N" required>
</label>N
<label>
<input name="ns" type="radio" value="S" required>
</label>S
<label>
<input type="text" name="nsk" id="nsk" size="15" maxlength="20" inputmode="numeric" pattern="[0-9\.]+" required>
<br /><br />
</label>
<label>
<input name="we" type="radio" value="W" required>
</label>W
<label>
<input name="we" type="radio" value="E" required>
</label>E
<label>
<input type="text" name="wek" id="wek" size="15" maxlength="20" inputmode="numeric" pattern="[0-9\.]+" required>
<br /><br />
</label>
<label><i><u>optionale Angabe:</u></i></label><br />
<label>
Höhe (in m):
<input type="number" name="high" size="5" maxlength="10"><br />
</label>
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block inhalt %}
<p>
<b>Welche Art von QR-Code soll generiert werden?</b><br>
<div><button><a href="text.html">einfacher Text </a></button></div>
<div><button><a href="url.html">URL/Website-Link</a></button></div>
<div><button><a href="tel.html">Telefonnummer</a></button></div>
<div><button><a href="mail.html">EMail-Adresse</a></button></div>
<div><button><a href="wifi.html">WIFI</a></button></div>
<div><button><a href="cal.html">Kalender-Termin</a></button></div>
<div><button><a href="vcard.html">Visitenkarte (vCard)</a></button></div>
<div><button><a href="mecard.html">Visitenkarte (MeCard)</a></button></div>
<div><button><a href="geo.html">geographische Koordinaten</a></button></div>
{% endblock %}

View File

@@ -0,0 +1,24 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Wie lautet die EMail-Adresse?</label><br />
<input type="hidden" name="type" value="mail">
<label for="mail">EMail:</label>
<input type="email" name="mail" id="mail" size="30" maxlength="60" required><br />
<label><i>optionale Angaben:</i></label><br />
<label for="subject">Betreff:</label>
<input type="text" name="subject" id="subject" size="30" maxlength="120"><br />
<label for="cc">CC:</label>
<input type="email" name="cc" id="cc" size="30" maxlength="60"><br />
<label for="bcc">BCC:</label>
<input type="email" name="bcc" id="bcc" size="30" maxlength="60"><br />
<label for="body">Body / Text:</label>
<input type="text" name="body" id="body" size="30" maxlength="180"><br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,49 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Gebe bitte Details für die Visitenkarte an!</label><br />
<input type="hidden" name="type" value="mecard">
<label for="vname">Vorname:</label>
<input type="text" name="vname" id="vname" size="30" maxlength="60" required><br />
<label for="nname">Nachname:</label>
<input type="text" name="nname" id="nname" size="30" maxlength="60" required><br />
<label><i><u>optionale Angaben:</u></i></label><br />
<label for="titel">Titel (z.B. Dr.,Prof.):</label>
<input type="text" name="titel" id="titel" size="10" maxlength="60"><br />
<label for="tel">Telefon:</label>
<input type="tel" name="tel" id="tel" size="20" maxlength="24"><br />
<label for="mail">EMail:</label>
<input type="email" name="mail" id="mail" size="30" maxlength="120"><br />
<label for="url">Webseite:</label>
<input type="url" name="url" id="url" size="30" maxlength="120"><br />
<label for="nickname">Spitzname &#47; Pseudonym:</label>
<input type="text" name="nickname" id="nickname" size="20" maxlength="60"><br />
<label for="gebdate">Geburtsdatum</label>
<input type="date" name="gebdate" id="gebdate"><br />
<label for="note">freie Notiz:</label>
<input type="text" name="note" id="note" size="30" maxlength="240"><br />
<br />
<label for="strasse">Strasse:</label>
<input type="text" name="strasse" id="strasse" size="30" maxlength="120"><br />
<label for="plz">Postleitzahl:</label>
<input type="text" name="plz" id="plz" size="10" maxlength="20"><br />
<label for="ort">Ort:</label>
<input type="text" name="ort" id="ort" size="30" maxlength="120"><br />
<label for="land">Land:</label>
<input type="text" name="land" id="land" size="30" maxlength="120"><br />
<label for="adresszusatz">Adresszusatz &#47; Wohnungsnummer:</label>
<input type="text" name="adresszusatz" id="adresszusatz" size="20" maxlength="120"><br />
<label for="pbox">Postfach:</label>
<input type="text" name="pbox" id="pbox" size="20" maxlength="60"><br />
<label for="bland">Bundesland:</label>
<input type="text" name="bland" id="bland" size="30" maxlength="120"><br />
<br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block inhalt %}
<p>
<b>folgendes wurde im QR-Code codiert:</b><br>
{{ data }} <br>
<br>
<!--suppress HtmlUnknownTarget -->
<img src="{{ data|qrcode(fit=True, box_size=10, border=2, ) }}" alt="QR-Code f&uuml;r {{ data }}">
</p>
<p>
<a href="index.html">Noch einmal bitte!</a>
</p>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label for="tel">Bitte Telefonnummer eingeben:</label><br>
<input type="hidden" name="type" value="tel" required>
<input type="tel" name="tel" id="tel" size="30" maxlength="30">
<br><br>
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label for="text">Was soll im QR-Code stehen?</label><br>
<input type="hidden" name="type" value="text">
<input type="text" name="text" id="text" size="30" maxlength="120" required>
<br><br>
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Wie lautet die URL / Webadresse?<br>(inkl. http...)</label><br />
<input type="hidden" name="type" value="url">
<label for="url">URL:</label>
<input type="url" name="url" id="url" size="30" maxlength="120" required><br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,63 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Gebe bitte Details für die Visitenkarte an!</label><br />
<input type="hidden" name="type" value="vcard">
<label for="vname">Vorname:</label>
<input type="text" name="vname" id="vname" size="30" maxlength="60" required><br />
<label for="nname">Nachname:</label>
<input type="text" name="nname" id="nname" size="30" maxlength="60" required><br />
<label><i><u>optionale Angaben:</u></i></label><br />
<label for="titel">Titel (z.B. Dr.,Prof.):</label>
<input type="text" name="titel" id="titel" size="10" maxlength="60"><br />
<label for="pbox">Postfach:</label>
<input type="text" name="pbox" id="pbox" size="30" maxlength="120"><br />
<label for="strasse">Strasse:</label>
<input type="text" name="strasse" id="strasse" size="30" maxlength="120"><br />
<label for="adresszusatz">Adresszusatz:</label>
<input type="text" name="adresszusatz" id="adresszusatz" size="30" maxlength="120"><br />
<label for="plz">Postleitzahl:</label>
<input type="text" name="plz" id="plz" size="30" maxlength="120"><br />
<label for="ort">Ort:</label>
<input type="text" name="ort" id="ort" size="30" maxlength="120"><br />
<label for="bland">Bundesland:</label>
<input type="text" name="bland" id="bland" size="30" maxlength="120"><br />
<label for="land">Land:</label>
<input type="text" name="land" id="land" size="30" maxlength="120"><br />
<br />
<label for="tel-p">Telefon (privat):</label>
<input type="tel" name="tel-p" id="tel-p" size="30" maxlength="120"><br />
<label for="mobil-p">Mobiltelefon (privat):</label>
<input type="tel" name="mobil-p" id="mobil-p" size="30" maxlength="120"><br />
<label for="mail-p">EMail (privat):</label>
<input type="email" name="mail-p" id="mail-p" size="30" maxlength="120"><br />
<br />
<label for="org">Organisation &#47; Firma:</label>
<input type="text" name="org" id="org" size="30" maxlength="120"><br />
<label for="jtitel">Job-Titel &#47; Funktion:</label>
<input type="text" name="jtitel" id="jtitel" size="30" maxlength="120"><br />
<label for="tel-a">Telefon (gesch.):</label>
<input type="tel" name="tel-a" id="tel-a" size="30" maxlength="120"><br />
<label for="mobil-a">Mobiltelefon (gesch.):</label>
<input type="tel" name="mobil-a" id="mobil-a" size="30" maxlength="120"><br />
<label for="mail-a">EMail (gesch.):</label>
<input type="email" name="mail-a" id="mail-a" size="30" maxlength="120"><br />
<br />
<label for="fax">Fax:</label>
<input type="tel" name="fax" id="fax" size="30" maxlength="120"><br />
<label for="url">Webseite:</label>
<input type="url" name="url" id="url" size="30" maxlength="120"><br />
<label for="nickname">Spitzname &#47; Pseudonym:</label>
<input type="text" name="nickname" id="nickname" size="30" maxlength="120"><br />
<label for="gebdate">Geburtsdatum</label>
<input type="date" name="gebdate" id="gebdate">
<label for="ohneJahr"><i>ohne Jahrezahl</i></label>
<input type="checkbox" name="ohneJahr" id="ohneJahr" value=True><br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -0,0 +1,31 @@
{% extends "base.html" %}
{% block inhalt %}
<form method="POST" action="qr.html">
<label>Gebe bitte Details zum WIFI ein!</label><br />
<input type="hidden" name="type" value="wifi">
<label for="ssid">Netzwerkname (SSID):</label>
<input type="text" name="ssid" id="ssid" size="30" maxlength="60" required><br />
<label for="passw">Passcode &#47; Passwort:</label>
<input type="text" name="passw" id="passw" size="30" maxlength="60"><br />
<input type="checkbox" name="hidden" id="hidden" value=True>
<label for="hidden"><i>versteckte &#47; unsichtbare SSID</i></label><br />
<label>
<input name="auth" type="radio" value="WPA" required>
</label> WPA/WPA2/WPA3<br />
<label>
<input name="auth" type="radio" value="nopass" required>
</label> keine Verschl&uuml;sselung
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}