Bottle: Micro Web Framework

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

1) Stimmt, aber frueher oder spaeter kommen noch Optionen dazu, wie z.B. default URL Parameter oder validator Einstellungen.

2) Ist fuer Schreibfaule oder Leute, die das von anderen Frameworks gewoehnt sind. Ist Geschmackssache, hat aber nur wenige Zeilen gekostet ;)

Ganz nebenbei hab ich heraus gefunden, wie man Singletons in Python baut :D .__new__() ist toll :D
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Defnull hat geschrieben:Ganz nebenbei hab ich heraus gefunden, wie man Singletons in Python baut :D .__new__() ist toll :D
Daneben gibts das Borg-Pattern und Module sind natuerliche Singletons ;)
Mitsushiko hat da auch einen netten Post darueber geschrieben: http://lucumr.pocoo.org/2009/7/24/singl ... -in-python
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,
ich hoffe ich pamiere mich jetzt nicht völlig (bin ein totaler anfänger in sachen html,php,css und webserver):
ich hatte vor ungefähr 5 minuten "Bottle" für mich entdeckt. Jetzt wollte ich mithilfe folgendes script eine php-page zum laufen bringen:

Code: Alles auswählen

from bottle import run, route

@route('/')
def index():
    phpCode = open("index.html", "r")
    return phpCode.read()

run(host='localhost', port=80)

Kann man überhaupt nur mithilfe von Bottle php seiten anzeigen lassen?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Nein, du kannst mit einem Python-Webframework keinen PHP-Code parsen (ohne externe Werkzeuge) - aber warum willst du das überhaupt? ;-)
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Witzige Idee eigentlich: Mann könnte die php-cgi executable mit subprocess öffnen, sie mit den env-variablen aus wsgis environ füttern (die ja weitgehend CGI kompatibel sind) und den output an den Browser zurück werfen. Käme auf einen Versuch an ;)

Alternativ könnte man auch eines der vielen fastcgi/wsgi Gateways schnappen und in ein wsgi/fastcgi Gateway umschreiben :D
Bottle: Micro Web Framework + Development Blog
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

man könnte natürlich auch versuchen, mit Python PHP Code auszuführen, der wiederum den eigentlich gewünschten Python-Code ausführt. Die Frage ist nur, was soll das bringen und wofür der Aufwand?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

es ist halt nur so das ich oft am design und am html gerüst arbeite und den html code dann immer und die php datei importiere und den content einfüge.
Sieht dann ungefähr so aus:

Code: Alles auswählen

$content = "Inhalt der Website";

$template = implode("", file("static/style.html"));
$template = str_replace&#40;"<!inhalt!>", $content, $template&#41;;
echo &#40;$template&#41;;
?>
Somit ist es viel leichter den überblick zu behalten (für mich zumindest)
lunar

Und wofür genau benötigt man da jetzt PHP?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Das frage ich mich auch, tausche einfach den <!inhalt!>-Tag durch einen entsprechenden anderen Tag deiner Templatesprache aus und lass das rendern.
Würde dann mit einer Templatesprache irgendwie so aussehen (welche du verwendest bleibt deinen Anforderungen und Wünschen überlassen):

Code: Alles auswählen

@route('dein_view')
def function():
    ... get content
    return render('templates/style.html', content=content)
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Ich kenne mich doch noch nicht mit Bottle aus.
Ich wusste nicht das es soeine funktion gibt.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Das ist auch keine spezielle Funktion von bottle, obwohl ich glaube, dass bottle sogar eine eigene Templatesprache mitbringt.
Wie gesagt, du kannst jede beliebige Templatesprache verwenden (Mako, Jinja, Cheetah,...).

Dokumentationen und Tutorials lesen, kann Wunder wirken (kennst du die Funktionen dir und help?).
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

SchneiderWeisse hat geschrieben:Das frage ich mich auch, tausche einfach den <!inhalt!>-Tag durch einen entsprechenden anderen Tag deiner Templatesprache aus und lass das rendern.
Würde dann mit einer Templatesprache irgendwie so aussehen (welche du verwendest bleibt deinen Anforderungen und Wünschen überlassen):

Code: Alles auswählen

@route('dein_view')
def function():
    ... get content
    return render('templates/style.html', content=content)
Kann mir jemand mal das jemand genauer erklären. Ich versteh diesen Code teil nicht so ganz.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

ahh... sorry habs schon verstanden. Danke
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

SchneiderWeisse hat geschrieben:obwohl ich glaube, dass bottle sogar eine eigene Templatesprache mitbringt.
Jap, tut es. Und die ist auch dokumentiert
Bottle: Micro Web Framework + Development Blog
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Selbst wenn Bottle keine `template()`-Funktion hätte, für die Anforderung, etwas wie `<!inhalt!>` in einem String durch den Inhalt einer anderen Datei zu ersetzen, ist nun wirklich nicht mehr als ein Zweizeiler:

Code: Alles auswählen

    content = "Webseite ... <!inhalt!> ..."
    with open("static/whatever") as f:
        return content.replace("<!inhalt!>", f.read())
Stefan
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

hallo,
ich spiele jetzt schon seit ein paar tagen mit diesen "micro" web framework, aber immer bleibe ich bei den folgenden problem hängen:
Wenn ich in meiner CSS-Datei bilder auf "static/images/bg.png" (oder ect.) verlinke und dann noch folgenden code in meine python datei hinzufüge funktioniert das ganze trotzdem nicht.

Code: Alles auswählen

@route('/static/:filename#.*#')
def send_staticFiles(filename):
     send_file(filename, root=self.static_directory)

@route('/static/images/:filename#.*#')
def send_images(filename):
     send_file(filename, root=self.image_directory)
Was mache ich flach?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wo kommt das `self` her?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

ich hab das ganze gerade aus einer klasse rauskopiert.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Was sagen denn die logs? 404? 401? Oder sogar ne Exception? "funktioniert nicht" ist eine sehr ungenaue Fehlerbeschreibung.

Mal ein paar Vermutungen:

1) self.static_directory ist leer
2) self.static_directory ist falsch
3) self.static_directory ist ein relativer Pfad und du benutzt mod_wsgi

Im letzten Fall hilft es, einen absoluten Pfad anzugeben.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

also in der konsole steht nur:

Code: Alles auswählen

localhost - - [02/Sep/2009 16:44:06] "GET /static/images/bg.jpg HTTP/1.1" 200 54 14
und der pfad ist auch in ordnung.
Antworten