Seite 30 von 30

Re: Bottle: Micro Web Framework

Verfasst: Samstag 7. Juli 2012, 14:04
von seishin
Ja ich reiche einfach nur den image link ans Template:

Code: Alles auswählen

return template('detail', image=image)
Dann im Template:

Code: Alles auswählen

<img src="{{image}}" alt="load image" width="214px" height="317px" /><br>
Wie noch ergänzt, wenn das Bild einmal in einem anderen Tab geöffnet wird.
Und man die Seite neu lädt auf welcher es sein sollte... dann ist es da.

Leuchtet ein mit der anderweitigen Anfrage des Browser.
Tjö, aber wie umgehe ich dies, bzw. löse es?

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 8. Juli 2012, 01:52
von Leonidas
Und was steht in "image"? Doch nicht etwa die Binärdaten der Bilddatei?

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 8. Juli 2012, 11:36
von seishin
Nein, einzig der Link des Bildes.

Man vermag ja auch auf das "Bild" PLatzhalter zu klicken. Rechtsklick Adresse des Bildes kopieren, in einem neuen Tab öffnen und voila das Bild ist da. Lade ich die Seite neu auf der zu erst nur der Platzhalter war ist das Bild auch dort (nachdem ich es in dem anderen Tab einmal aufgerufen habe.)....

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 8. Juli 2012, 11:58
von BlackJack
@seishin: Was ist denn das für ein Link zu dem Bild? Liegt das *vor* der ganzen Aktion schon vor? Oder wird das erst bei dem Aufruf generiert, der das ausgefüllte Template an den Client schickt? Wird es dafür gespeichert? Falls ja, wo und wie? Verlässt Du Dich dabei vielleicht auf ein implizites `close()` oder `commit()` was zu dem Zeitpunkt wo der Client das Bild anfordert noch nicht durchgeführt wurde, aber kurz danach dann doch?

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 8. Juli 2012, 12:43
von seishin
Ich hole mir aus der IMDB API... Film-Informationen als JSON.
Aus der Rückgabe von IMDB (JSON) nehme ich mir dann die gewünschten Informationen.

Demnach habe ich nur den Link zum Cover, ich möchte es nicht speichern.
Die Informationen werden bei jedem Aufruf neu bei IMDB abgefragt und in Variablen zwischengespeichert.
Dann wie oben beschrieben ins Template gereicht.

Ich greife ja nicht nur das Bild ab, sondern noch Ranking usw. diese ganzen Informationen werden angezeigt.
Nur das Bild eben nicht. Klar der Browser muss dann erst noch das Bild laden... sollte er ja aber können, da er den Link kennt... Tut er aber nicht, erst nachdem, wie beschrieben.

Deswegen diese Verwirrung... :K

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 07:14
von seishin
Meine Vermutung deshalb der Cache, weil im DebugModus und lokal funktioniert das ganze einwandfrei.
Demnach weiß jemand wie ich den Template Cache deaktiviere?

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 07:42
von BlackJack
@seishin: Ich sehe nicht was der Template Cache damit zu tun haben soll. Die Templates werden geladen und vom Textformat in eine interne Form umgewandelt. *Das* wird gecachet — *unausgefüllte* Templates. Damit das laden des Template-Quelltextes und das umwandeln in die interne Struktur für ein Template nur einmal gemacht werden muss. Befüllt werden sie immer wieder aufs neue mit Daten.

Ausserdem wäre ein Cache-Effekt eher umgekehrt — es funktioniert beim ersten mal und zeigt bei folgenden Aufrufen alte Daten, eben weil die Daten vom ersten mal im Cache sind.

Schreib doch mal eine minimale Bottle-App an der man das Problem nachvollziehen kann und zeig die mal her.

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 08:28
von deets
Welchen Browser benutzt du denn?

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 11:02
von seishin
Safari, Firefox, IE... alles getestet. Stets das Selbe.

Richtig BackJack jedoch müssen ja statische Files (css, javascript, images etc.) auch erst als static ganz zu beginn eingebunden werden.

Code: Alles auswählen

@bottle.route('/static/:filename#.*#') 
def static(filename):     
 return bottle.static_file(filename, root='./static/') 
Aber ich werde heute Abend mal eine kleine Anwendung scripten.
Evtl. fallen dann ja auch die Tomaten... :D
Werde aber auf jedenfall berichten.

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 19:45
von seishin
Sodalum:

example.py

Code: Alles auswählen

#!/usr/bin/env 
# -*- coding: utf-8 -*-

# mal eben auf die schnelle unerhörte imports...
from bottle import *
import urllib2
import cookielib
import json

@route('/')
def start():
    cj = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10')]
    url = "http://www.imdbapi.com/?i=tt0133093"
    html = opener.open(url).read()
    jdata = json.loads(html)

    imdbid = jdata["imdbID"]
    title = jdata["Title"]
    image = jdata["Poster"]
    
    return template('details', imdbid=imdbid, title=title, image=image)


debug(True)
run(host='localhost', port='8080', reloader=True)
views/details.tpl

Code: Alles auswählen

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>foobar</title>
</head>
<body>
<hr>
<p>
    IMDBID: {{imdbid}}<br>
    Title: {{title}}<br>
    <img src="{{image}}" alt="load image" width="214px" height="317px" /><br>
</p>
<hr>
</body>
</html>
Bevor nun alle schreien also bei mir geht das, noch:
Es funktioniert lokal.
Als Server benutze ich einen Apache mit mod_wsgi.
Symptom: Bild online nicht da, alles andere schon.
Lädt man das Bild in einem anderen Tab und die Seite auf der es angezeigt werden soll neu, dann auch dort...

Danke für euere Anteilnahme.

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 19:56
von DasIch
Sicher dass IMDB das Einbinden von Bildern in dieser Weise erlaubt und nicht möglicherweise über den referrer blockt?

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 20:01
von seishin
Ja, das wird erlaubt.
Da ich die Anfrage jedes mal neu stelle und keine bedeutende Last darstelle (ist eine Intranet Anwendung, User = 2)...
Umgehe ich ihre Art der "Abwehr" bzw. dauerhaften Einbindung. Sie ändern in gewissen Abständen die image names.

Wenn sie das nicht wollen, dann würden sie denke ich gar keine Bilder durch die API schicken...

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 21:24
von Sr4l
Nein, nicht erlaubt.

Das Problem: öffnet man das Bild und sendet einen referer mit, was die Browser bei eingebundenen Bildern machen, dann bekommt man nen 403 - Referral Denied

Öffnet man das Bild in einem Tab kommt kein refere mit und es geht.

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 10. Juli 2012, 21:32
von seishin
Hmm, sowas aber auch!
Najut, dennoch vielen Dank!