provide qr codes for printing

master
Thomas Lindner 2021-11-10 17:20:35 +01:00
parent a02d190438
commit 49bbe12917
8 changed files with 39 additions and 4 deletions

View File

@ -1,5 +1,8 @@
#!/usr/bin/env python3
import bottle
import io
import qrcode
import qrcode.image.styledpil as qrstyled
import sqlite3
@ -18,6 +21,13 @@ cursor.execute("""
""")
def url(route):
return '%s://%s/%s' % (
bottle.request.urlparts.scheme,
bottle.request.urlparts.netloc,
route)
@application.get("/")
@bottle.view("template/new.tpl")
def new_get():
@ -29,7 +39,7 @@ def new_get():
def new_post():
event = bottle.request.forms.get("event", "")
if event:
bottle.redirect("event/" + event)
bottle.redirect(url("qr/" + event))
return dict(event=event, feedback=True)
@ -38,6 +48,23 @@ def static_get(file):
return bottle.static_file(file, root="static")
@application.get("/qr/<event>")
@bottle.view("template/qr.tpl")
def qr_get(event):
return dict(event=event, url=url("event/" + event))
@application.get("/qr/img/<event>.png")
def qr_img_get(event):
qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=20)
qr.add_data(url("event/" + event))
image = qr.make_image(image_factory=qrstyled.StyledPilImage, embeded_image_path="heizhaus_logo_square.png")
buffer = io.BytesIO()
image.save(buffer, format="PNG")
bottle.response.content_type = "image/png"
return buffer.getvalue()
@application.get("/event/<event>")
@bottle.view("template/event.tpl")
def event_get(event):

BIN
heizhaus_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
heizhaus_logo_circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
heizhaus_logo_square.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1 +1,2 @@
bottle
qrcode[pil]

View File

@ -1,4 +1,4 @@
% rebase('template/toplevel.tpl', title=event)
% rebase("template/toplevel.tpl", title=event)
% if get("success", False):
<div class="alert alert-success">Erfolgreich registriert.</div>
<form method="get">

View File

@ -1,8 +1,8 @@
% rebase('template/toplevel.tpl', title='Neu erstellen')
% rebase("template/toplevel.tpl", title="Neu erstellen")
<form method="post">
<div class="form-group {{ ("has-success" if get("event", False) else "has-error") + " has-feedback" if get("feedback", False) else "" }}">
<label for="event">Veranstaltungsort:</label>
<input id="event" class="form-control" placeholder="Kunstrasen" name="event" value="{{ get("event", "") }}">
<input id="event" class="form-control" placeholder="Heizhaus" name="event" value="{{ get("event", "") }}">
% if get("feedback", False):
<span class="glyphicon {{ "glyphicon-ok" if get("event", False) else "glyphicon-remove" }} form-control-feedback"></span>
% end

7
template/qr.tpl Normal file
View File

@ -0,0 +1,7 @@
% rebase("template/toplevel.tpl", title=event)
<div class="hidden-print">
<a class="btn btn-default" href="{{ url }}">Zum Formular</a>
<button class="btn btn-primary" onclick="window.print()">Drucken</button>
</div>
<img class="img-responsive" src="img/{{ event }}.png" alt="QR-Code">
<p class="lead">{{ url }}</p>