Was ist mit locale.getpreferredencoding?Defnull hat geschrieben:Es muss eine Möglichkeit geben, die Kodierung der Template-Datei und die Kodierung der Byte String Template Variablen anzugeben.
Bottle: Micro Web Framework
http://www.felix-benner.com
@tordmor: Da finde ich fest UTF-8 besser, denn mit UTF-8 kann man "alles" ausdrücken. Wenn man die lokale Kodierung benutzt, dann läuft vielleicht alles auf dem Entwickungsrechner, aber wenn man es dann auf den Webserver hochlädt, benutzt der vielleicht eine andere Kodierung.
Wenn der Rechner eine andere Kodierung hat, sollten die Dateien dort auch anders kodiert sein. Wer verschiedene Kodierungen mischt, muss immer angeben, welche er gerade verwendet. Immer utf-8 klappt nicht, weil nicht jede Bytefolge einen korrekten utf-8 text darstellt und spätestens wenn man includes hat, werden die Pfadnamen falsch dekodiert.BlackJack hat geschrieben:@tordmor: Da finde ich fest UTF-8 besser, denn mit UTF-8 kann man "alles" ausdrücken. Wenn man die lokale Kodierung benutzt, dann läuft vielleicht alles auf dem Entwickungsrechner, aber wenn man es dann auf den Webserver hochlädt, benutzt der vielleicht eine andere Kodierung.
http://www.felix-benner.com
@tordmor: Das ist nicht Dein Ernst oder? Wenn ich etwas entwickelt habe, dann möchte ich das einfach hochladen und nicht erst noch umkodieren. *Ich* möchte bestimmen welche Kodierung ich für meine Daten verwende -- das hat mir der Webserver doch nicht vorzuschreiben. Und wenn man Umlaute in Dateinamen verwendet, dann bettelt man geradezu um Probleme.
BlackJack hat geschrieben: *Ich* möchte bestimmen welche Kodierung ich für meine Daten verwende
Und wie passen die beiden Aussagen zusammen?BlackJack hat geschrieben: Da finde ich fest UTF-8 besser,
http://www.felix-benner.com
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ganz einfach: Besser der Zwang eines Standard-Encodings (auf das man sich dann aber verlassen kann) als eine "willkürliche" Wahl des Server-OStordmor hat geschrieben:BlackJack hat geschrieben: *Ich* möchte bestimmen welche Kodierung ich für meine Daten verwendeUnd wie passen die beiden Aussagen zusammen?BlackJack hat geschrieben: Da finde ich fest UTF-8 besser,

Idealer Weise sollte man das Encoding selber bestimmen können, aber Defnull hat ja oben erläutert, wieso das nicht trivial zu realisieren ist.
Ich bin gerade über Router.match gestolpert. Macht es da nicht mehr Sinn, statt None, ein leerer dict für data zurückzugegen, wenn es keine Daten gibt?
Bisher muss man noch ``data = data if data is not None else dict()`` dazuschreiben.
Code: Alles auswählen
r = Router()
r.add('/foo', lambda: 'foo')
r.add('/:bar', lambda bar: bar)
handler, data = r.match('/foo')
handler(**data)
handler, data = r.match('/abc')
handler(**data)
Zuletzt geändert von jbs am Donnerstag 28. Januar 2010, 20:44, insgesamt 1-mal geändert.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@tordmor: Ergänzend zu Hyperion's Antwort: Diese Standardkodierung ist sogar die, die ich sowieso gewählt hätte, eben aus dem Grund, dass sie alles abdeckt, was ich so kodieren können möchte. Und noch viel mehr.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
jbs hat geschrieben:Bisher muss man noch ``data = data if data is not None else dict()`` dazuschreiben.
Code: Alles auswählen
data or {}
Ich probiere gerade Klassenbasiert mit bottle zu arbeiten. Dabei sind Methoden automatisch Teil der URL.
Der Inhalt von `profil` wird an `_publish` übergeben, der dann für die weitere Ausgabe zuständig ist. Nun stört sich `@view` an dem self, das übergeben wird, da es nur ``**kwargs`` übergibt. Zumindest in diesem Fall wäre das erweitern des wrapper um `*args` IMHO sinnvoll.
Code: Alles auswählen
@tree_route('/kunde/:name')
class Kunde(TreeRoute):
@view('page')
def _publish(self, out):
return dict(content=out)
def profil(self):
return self.name
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
`data` enthält die Daten in Form eines dict. Wenn es keinen Daten gibt, dann finde ich ein leeres dict besser als None.Dauerbaustelle hat geschrieben:jbs hat geschrieben:Bisher muss man noch ``data = data if data is not None else dict()`` dazuschreiben.Code: Alles auswählen
data or {}
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Zum Router: Ich habe ursprünglich None zurück geben lassen, weil ich es für schneller hielt, als erst ein dict zu erzeugen, das eh nicht benutzt wird. In der Tat ist "if None: pass" etwa 4,5 mal schneller als "if dict(): pass". Was ich nicht beachtet habe, ist das die zweite Variante hauptsächlich durch den dict() Funktionsaufruf gebremst wird und nicht durch die Erzeugung der Datenstruktur. "if {}: pass" unterscheidet sich nur noch unwesentlich von der None-Variante; die Vereinheitlichung macht also Sinn. Hier ist der Patch:
http://github.com/defnull/bottle/commit ... 9210d48307
Den @view() Dekorator habe ich ebenfalls angepasst. Dabei konnte ich auch gleich mal etwas mit functools rum spielen und ein paar Code Zeilen einsparen.
http://github.com/defnull/bottle/commit ... 96c51a4057
Einige TemplateAdapter API Änderung sind in Arbeit. Unter Anderem werden die Template-Lookups etwas intelligenter und Endungen, die von *.tpl abweichen, werden dann auch funktionieren. Es ist allerdings echt ein Krampf, wenn man sich die Adapter mal anschaut. Kein Template-System gleicht den anderen. Jeder macht sein Ding. Die APIs sind völlig verschieden und teilweise auch konzeptionell völlig inkompatibel. Aber genau dazu sind Adapter ja da: Das Ganze zu vereinheitlichen.
http://github.com/defnull/bottle/commit ... 9210d48307
Den @view() Dekorator habe ich ebenfalls angepasst. Dabei konnte ich auch gleich mal etwas mit functools rum spielen und ein paar Code Zeilen einsparen.
http://github.com/defnull/bottle/commit ... 96c51a4057
Einige TemplateAdapter API Änderung sind in Arbeit. Unter Anderem werden die Template-Lookups etwas intelligenter und Endungen, die von *.tpl abweichen, werden dann auch funktionieren. Es ist allerdings echt ein Krampf, wenn man sich die Adapter mal anschaut. Kein Template-System gleicht den anderen. Jeder macht sein Ding. Die APIs sind völlig verschieden und teilweise auch konzeptionell völlig inkompatibel. Aber genau dazu sind Adapter ja da: Das Ganze zu vereinheitlichen.
Bottle: Micro Web Framework + Development Blog
Ah, hab dir einen pull-request aufgehalst
Wie kann ich denn mein Fork auf die aktuelle Version bringen?
Sollte es nicht @functools.wraps heißen (+@)?

Wie kann ich denn mein Fork auf die aktuelle Version bringen?
Sollte es nicht @functools.wraps heißen (+@)?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Wenn du deine eigenen Änderungen behalten willst "git rebase". Aber Vorsicht, das verändert deine History, was ekelige Nebenwirkungen haben kann (doku unbedingt vorher lesen)jbs hat geschrieben:Ah, hab dir einen pull-request aufgehalst![]()
Wie kann ich denn mein Fork auf die aktuelle Version bringen?
Ja, sollte es. Ich glaub, den Bug hätte ich nie bemerktjbs hat geschrieben:Sollte es nicht @functools.wraps heißen (+@)?

Bottle: Micro Web Framework + Development Blog
File Uploads don't work.
result:
: python2.6
Code: Alles auswählen
from bottle import run, route, request, debug
@route('/')
def main():
return """<html><body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input name="datafile" type="file" />
<input type=submit value="OK" />
</form>
</body></html>"""
@route('/upload', method='POST')
def do_upload():
df = request.POST.get('datafile')
return df.read()
debug(True)
run(host='', port=8080, reloader=True)
Code: Alles auswählen
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/bottle-0.6.4-py2.6.egg/bottle.py", line 309, in __call__
output = handler(**args)
File "/src/test1.py", line 16, in do_upload
return df.read()
File "/usr/lib/python2.6/cgi.py", line 522, in __getattr__
raise AttributeError, name
AttributeError: read
Code: Alles auswählen
@route('/upload', method='POST')
def do_upload():
df = request.POST.get('datafile')
return df.value
variant for loaded

Code: Alles auswählen
@route('/upload', method='POST')
def do_upload():
df = request.POST.get('datafile')
open('uploads/111.txt','wb').write( df.file.read() )
redirect('/',302)

wiki by bottle in 23 minuten
http://lega.selfip.com/page/23 (video 33Mb, Host ist nicht verfügbar, in der Nacht)

http://lega.selfip.com/page/23 (video 33Mb, Host ist nicht verfügbar, in der Nacht)

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich würds ja mirrorn, aber der Host ist nicht verfügbarzoxzox3 hat geschrieben:wiki by bottle in 23 minuten
http://lega.selfip.com/page/23 (video 33Mb, Host ist nicht verfügbar, in der Nacht)

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
error redirect
Kunde öffnet die Seite "domen.com", es apache-Proxy, der leitet die Anfragen an "host_local", die web_bottle.
Funktion bottle.redirect('/'), gesetzt location = 'host_local/', und richtig location = 'domen.com/'
diff
Kunde öffnet die Seite "domen.com", es apache-Proxy, der leitet die Anfragen an "host_local", die web_bottle.
Funktion bottle.redirect('/'), gesetzt location = 'host_local/', und richtig location = 'domen.com/'
diff
Code: Alles auswählen
Index: bottle.py
===================================================================
--- bottle.py (revision )
+++ bottle.py (working copy)
@@ -755,10 +755,12 @@
raise HTTPError(code, text)
-def redirect(url, code=303):
+def redirect(url, code=303, absoluteurl=True):
""" Aborts execution and causes a 303 redirect """
- scriptname = request.environ.get('SCRIPT_NAME', '').rstrip('/') + '/'
- location = urljoin(request.url, urljoin(scriptname, url))
+ if absoluteurl:
+ scriptname = request.environ.get('SCRIPT_NAME', '').rstrip('/') + '/'
+ location = urljoin(request.url, urljoin(scriptname, url))
+ else: location = url
raise HTTPResponse("", status=code, header=dict(Location=location))