sowas wie (ungetestet)
Code: Alles auswählen
def index():
from schnitt_test import schnittkraefte
s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20)
return "Content-Type: image/png\n" + s
Code: Alles auswählen
def index():
from schnitt_test import schnittkraefte
s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20)
return "Content-Type: image/png\n" + s
Ich hab gedacht, dass man so den Type übergeben kann.Rebecca hat geschrieben:Warum kommst du jetzt auf static_file, wo du doch nun extra matplotlib dazu gebracht hast, KEINE Datei zu speichern?
sowas wie (ungetestet)sollte es doch tun.Code: Alles auswählen
def index(): from schnitt_test import schnittkraefte s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20) return "Content-Type: image/png\n" + s
Vielen Dank für den Hinweis, jetzt funktioniert es endlichRebecca hat geschrieben:Naja, das ist ja schonmal einen Schritt weiter. OK, den Content-Type an den String zu klatschen war offensichtlich Bloedsinn, aber schau dir mal das Response-Objekt an...
Code: Alles auswählen
from bottle import route, run, static_file, debug, response
@route('/')
@route('/index.html')
def index():
from schnitt_test import schnittkraefte
s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20)
response.headers['Content-Type'] = 'image/png'
return s
debug(True)
run(host='localhost', port=8080)
Das Objekt bleibt so lange im Speicher wie lange es noch Referenzen drauf gibt. Wie jedes Objekt in Python ebenmathman hat geschrieben:Wenn das Bild ausgegeben wurde, bleibt das dann im Arbeitsspeicher oder wird das dann automatisch gelöscht? Weil wenn das Programm auf einem Server ständig läuft, wäre ja irgendwann der Arbeitsspeicher voll
OkLeonidas hat geschrieben:Das Objekt bleibt so lange im Speicher wie lange es noch Referenzen drauf gibt. Wie jedes Objekt in Python ebenmathman hat geschrieben:Wenn das Bild ausgegeben wurde, bleibt das dann im Arbeitsspeicher oder wird das dann automatisch gelöscht? Weil wenn das Programm auf einem Server ständig läuft, wäre ja irgendwann der Arbeitsspeicher voll
Ok das funktioniert soweitfrabron hat geschrieben:Na, eine Route für's HTML, und eine für das Bild. Im Template der HTML-Route verweist du im Bild-Element (das <img - Ding ) für dein Bild auf die Bild-Route und fertig.
Code: Alles auswählen
from bottle import route, run, static_file, debug, response
@route('/')
@route('/index.html')
def index():
return """
<p><img src="bild.png" alt="Plot"></p>
"""
@route('/bild.png')
def plot_schnittkraefte():
from schnitt_test import schnittkraefte
s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20)
from plot import plot_schnittkraefte
s = plot_schnittkraefte(s)
response.headers['Content-Type'] = 'image/png'
return s
debug(True)
run(host='localhost', port=8080)
Code: Alles auswählen
from bottle import route, run, static_file, debug, response
from schnitt_test import schnittkraefte
s = schnittkraefte(3, 2.25, 26700000., 5, 10, 30, 10, 20, 20, 20)
@route('/')
@route('/index.html')
def index():
return """
<p><img src="bild.png" alt="Plot"></p>
"""
@route('/bild.png')
def plot_schnittkraefte(s):
from plot import plot_schnittkraefte
s = plot_schnittkraefte(s)
response.headers['Content-Type'] = 'image/png'
return s
debug(True)
run(host='localhost', port=8080)
Meinst du damit, das ich mit dem Bild eine Dynamische Route erzeugen soll?EyDu hat geschrieben:Man könnte zum Beispiel die Bild-URL mit den gewünschten Parametern versehen.
Code: Alles auswählen
from bottle import url
@route('/details/param1/:param1/param2/:param2/....')
def details(param1, param2, ....):
# mach was
schnittkraefte(param1, param2, ....)
return '<img src="{url}">'.format({'url': url(plot, param1, param2, ....)})
@route('/plot/param1/:param1/param2/:param2/....')
def plot(param1, param2, ....):
# plotte was
Code: Alles auswählen
from bottle import route, run, static_file, debug, response, url
@route('/')
def index():
pass
@route('/bild.png/:dim/:z1/:z2/:z3/:z4')
def plot_schnittkraefte(dim, z1, z2, z3, z4):
matrix = []
if dim == "4":
#zerlgen von z1
z1 = z1.split(',')
#zerlegen von z2
z2 = z2.split(',')
#zerlegen von z3
z3 = z3.split(',')
#zerlegen von z4
z4 = z4.split(',')
#zusammfuegen zu Matrix
matrix.append(z1)
matrix.append(z2)
matrix.append(z3)
matrix.append(z4)
from plot import plot_schnittkraefte
s = plot_schnittkraefte(matrix)
response.headers['Content-Type'] = 'image/png'
return s
debug(True)
run(host='localhost', port=8080)
Was mach ich denn falsch, hab mich eigentlich am Tutorial gehalten ...Traceback (most recent call last):
File "/home/mkoenig/workspace/sb2brain/src/web_test_matrix.py", line 7, in <module>
@route('/bild.png/:dim/:z1/:z2/:z3/:z4')
File "/home/mkoenig/workspace/sb2brain/src/bottle.py", line 460, in wrapper
self.routes.compile()
File "/home/mkoenig/workspace/sb2brain/src/bottle.py", line 355, in compile
raise RouteSyntaxError("Could not add Route: %s (%s)" % (route, e))
bottle.RouteSyntaxError: Could not add Route: <Route('bild.png/:dim/:z1/:z2/:z3/:z4') /> (redefinition of group name 'z' as group 4; was group 3)
Ab einer bestimmten Komplexität der Parameter, die hier IMHO überschritten ist, sollte man lieber ein HTML-Seite (z.B. generiert aus einem Bottle-Template) mit einem HTML-Formular zur Dateneingabe vorschalten.Ist so was möglich oder völliger Quatsch ?
Das soll ja auch geschehen. Der Nutzer gibt in einer Eingabemaske die Daten ein und der Server berechnetnoisefloor hat geschrieben:Hallo,
Ab einer bestimmten Komplexität der Parameter, die hier IMHO überschritten ist, sollte man lieber ein HTML-Seite (z.B. generiert aus einem Bottle-Template) mit einem HTML-Formular zur Dateneingabe vorschalten.Ist so was möglich oder völliger Quatsch ?
Gruß, noisefloor
Code: Alles auswählen
from bottle import route, run, static_file, debug, response, url
@route('/')
def index():
pass
@route('bild/:z')
def plot_schnittkraefte(z):
#zerlgen von z
z1 = z.split(',')
return z1[1999]
debug(True)
run(host='localhost', port=8080)
Code: Alles auswählen
In [69]: a = numpy.array([[4,5,6],[7,8,9]])
In [70]: a
Out[70]:
array([[4, 5, 6],
[7, 8, 9]])
In [71]: json.encoder("name", a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/mkoenig/<ipython console> in <module>()
TypeError: 'module' object is not callable
und das ganze kann ich als string dann der route übergeben und dann sollte ein Modul mir das wieder entpacken.{
"typ" : "1",
"name" : [[4, 5, 6],
[7, 8, 9]]
}