mirror of
https://github.com/tebarius/Docker-Flask-QR.git
synced 2025-12-20 22:23:30 +01:00
Variante mit POST-REQUESTS ergänzt und Dockerfiles auf POST umgestellt
This commit is contained in:
98
.idea/workspace.xml
generated
98
.idea/workspace.xml
generated
@@ -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">{
|
||||
"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": "/home/tebarius/IdeaProjects/Docker-Flask-QR/app/templates",
|
||||
"project.structure.last.edited": "Modules",
|
||||
"project.structure.proportion": "0.15",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
"settings.editor.selected.configurable": "preferences.keymap"
|
||||
<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 />
|
||||
|
||||
@@ -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"]
|
||||
@@ -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
6
app/Flask-QR.py → app/GET-Flask-QR.py
Executable file → Normal 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
234
app/Post-Flask-QR.py
Normal 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)
|
||||
17
app/post-templates/base.html
Normal file
17
app/post-templates/base.html
Normal 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>
|
||||
30
app/post-templates/cal.html
Normal file
30
app/post-templates/cal.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
36
app/post-templates/geo.html
Normal file
36
app/post-templates/geo.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
15
app/post-templates/index.html
Normal file
15
app/post-templates/index.html
Normal 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 %}
|
||||
24
app/post-templates/mail.html
Normal file
24
app/post-templates/mail.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
49
app/post-templates/mecard.html
Normal file
49
app/post-templates/mecard.html
Normal 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 / 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 / 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
15
app/post-templates/qr.html
Normal file
15
app/post-templates/qr.html
Normal 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ür {{ data }}">
|
||||
</p>
|
||||
<p>
|
||||
<a href="index.html">Noch einmal bitte!</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
||||
12
app/post-templates/tel.html
Normal file
12
app/post-templates/tel.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
12
app/post-templates/text.html
Normal file
12
app/post-templates/text.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
15
app/post-templates/url.html
Normal file
15
app/post-templates/url.html
Normal 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
63
app/post-templates/vcard.html
Normal file
63
app/post-templates/vcard.html
Normal 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 / Firma:</label>
|
||||
<input type="text" name="org" id="org" size="30" maxlength="120"><br />
|
||||
<label for="jtitel">Job-Titel / 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 / 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ücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
31
app/post-templates/wifi.html
Normal file
31
app/post-templates/wifi.html
Normal 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 / 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 / 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üsselung
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<br />
|
||||
<button type="reset">Eingaben zurücksetzen</button>
|
||||
<button type="submit">Eingaben absenden</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user