web.py

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

Hallo,

ich habe mal das Tutorial von http://webpy.org/tutorial2.de
gemacht. Denke auch alles richtig gemacht zu haben.

PythonCode

Code: Alles auswählen

import web
import MySQLdb

render = web.template.render('templates/')

urls = (
        '/', 'index')

class index:
    def GET(self):
        todos = web.select('todo')
        print render.homepage(todos)
        render.cache = False

web.webapi.internalerror = web.debugerror

if __name__ == "__main__":
    web.config.db_parameters = dict(dbn='mysql', user='root', pw='root', db='_python')
    web.run(urls, globals(), web.reloader)
Meine homepage.html

Code: Alles auswählen

$def with (todos)
<ul>
	$for todo in todos:
		<li id="t$todo.id">$todo.title</li>
</ul>
Bekomme aber eine Fehlermeldung.

Code: Alles auswählen


exceptions.NameError at /
could not find 'def' (line 1)
Python 	C:\Programme\_Python24\Lib\site-packages\web\template.py in h_var, line 674
Web 	GET http://localhost:10000/
Traceback (innermost first)
...
Muss ich noch bestimmte Einstellungen machen?
Hab auch mysql_python und mod_python installiert.

Vielen Dank schon mal.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Hm, ich sehe das Problem so nicht. Hast du die aktuelle Version? Möglicherweise benutzt er doch Cheetah für die Templates? Oder muss man irgendwie das Templating aktivieren?
jordi
User
Beiträge: 7
Registriert: Sonntag 14. Oktober 2007, 19:07
Kontaktdaten:

Versuch's mal mit

Code: Alles auswählen

$def with (todos)
<ul>
$for todo in todos:
    <li id="t$todo.id">$todo.title</li>
</ul>
Das Templating-System ist was das einrücken angeht ziemlich lästig, soll sich aber in webpy 0.3 ändern.

Und vergewissere dich ob du auch wirklich webpy 0.2 installiert hast, ansonsten wird noch Cheetah, welches etwas anders funktioniert, verwendet.
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

Also ich habe web.py 0.22 installiert.
Und meine PythonVersion ist ActivePython-2.4.3.12.
Und mit dem einrücken hab ich auch drauf geachtet (4 Leerzeichen).

Wie kann ich denn dieses Templating aktivieren?
Ich meine der erste Teil des Tutorials hat ja funktioniert. Ich kann ja Hello World schreiben. Kann es vielleicht auch mit der Datenbank zu tun haben?
Die ist ja standardmässig auf Port 3306. Habe da im übrigen xampp zu laufen.
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

mmmhhhh...

Wie kann ich denn die Daten aus einem HTML-Formular in Python auslesen?
Gibt es ein Beispiel?

Hab es zwar mit web.input() probiert, aber wie kann ich darauf zu greifen in Python?
jordi
User
Beiträge: 7
Registriert: Sonntag 14. Oktober 2007, 19:07
Kontaktdaten:

In der `code.py`:

Code: Alles auswählen

def POST(self):
    i = web.input()
    n = web.insert('blog_entries', title=i.title, text=i.text, authorid=session['userid'], date=time.time())
Das Template:

Code: Alles auswählen

	<form action="/add" method="post" enctype="multipart/form-data">
		title : <input " type="text" name="title" /> <br />
		text : <br />
		<textarea name="text"></textarea>
		<br /> <br />
		<input type="submit" value="add" />
	</form>
Es empfiehlt sich auch die Beispiele hier anzusehen. (Wobei da einige noch älter sind un mit Cheetah arbeiten)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@Mister Wing: Ich weiß es ist nicht ganz angebracht und hilft dir erstmal nicht weiter. Aber du solltest dir vielleicht mal andere Sachen ansehen, wie z.B. django. Überfliege mal das Tutorial und urteile selbst: http://www.djangoproject.com/documentation/ :lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn man ``web.py`` mag, dann bevorzugt man eher kleine Frameworks. Ich habe in den letzten Tagen Werkzeug verwendet und muss sagen, dass es eigentlich ganz cool ist. Vor allem wenn man von Django kommt, kann man sich schnell viele Funktionen wrappen um eine Django-ähnliche Umgebung zu haben und damit schön schnell programmieren zu können.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Ich weiß nicht aber möchte man sich wirklich noch ``web.py`` antun? IMO grauenhafter Quellcode und naja...

BTW: Wekzeug. Grad mal überflogen (kannte ich bisher noch nicht). Hmm, vom Ansatz her nicht schlecht...Werde aber auch hier nicht recht warm mit (Müsste ich mich mal bei Gelegenheit ausgiebig mit beschäftigen). Der Quellcode ist **aber** 1A ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

poker hat geschrieben:BTW: Wekzeug. Grad mal überflogen (kannte ich bisher noch nicht). Hmm, vom Ansatz her nicht schlecht...Werde aber auch hier nicht recht warm mit (Müsste ich mich mal bei Gelegenheit ausgiebig mit beschäftigen). Der Quellcode ist **aber** 1A ;)
Nachdem ich ein Wrapper-Modul geschrieben habe, dass die lästigen Sachen bei Werkzeug macht (also etwa BaseRequest und BaseResponse subclassen) ist es eigentlich bisher ganz cool.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Die Frage ist immer, wie viel Zeit und Aufwand möchte man betreiben. Möchte man möglichst wenig machen und sich nur auf die eigentliche Aufgabe konzentrieren, nimmt man besser django und nutzt die vielen Dinge die es bietet. Oder hat man viel Zeit und möchte möglichst alles selber tun, dann nimmt man so Dinge wie Werkzeug... Die Hardcore Methode, alles selber machen, lohnt sich aber nicht wirklich.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

poker hat geschrieben:Ich weiß nicht aber möchte man sich wirklich noch ``web.py`` antun? IMO grauenhafter Quellcode und naja...
Sehe ich ähnlich. Es mag ja funktionieren und "reichen", aber es gab schon Schelte von bekannteren Leuten für den hingefrickelten Code.
Leonidas hat geschrieben:Nachdem ich ein Wrapper-Modul geschrieben habe, dass die lästigen Sachen bei Werkzeug macht (also etwa BaseRequest und BaseResponse subclassen) ist es eigentlich bisher ganz cool.
Ja, dass man erst Subklassen *muss* gefällt mir auch nicht.
blackbird: füge doch einfach fertige Subklassen für UTF-8 (und ggf. Latin-1) mit ein.

Allerdings ist die UTF-8-Fähigkeit nachwievor ein Killerkriterium. Mit Paste hab ich da immer mal wieder Probleme außerhalb der eigentlichen WSGI-Anwendung :/
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

mmmhhhh...

Werde mir das Tutorial mal anschauen.
Ich möchte eigentlich nur ein HTML-Formular auswerten in Python. Da wäre mit Django wohl nach Spatzen geschossen.
Benutze jetzt erst mal CGI, wird wahrscheinlich auch fürs erste reichen.

Trotzdem danke!
jordi
User
Beiträge: 7
Registriert: Sonntag 14. Oktober 2007, 19:07
Kontaktdaten:

Die Frage ist immer, wie viel Zeit und Aufwand möchte man betreiben. Möchte man möglichst wenig machen und sich nur auf die eigentliche Aufgabe konzentrieren, nimmt man besser django und nutzt die vielen Dinge die es bietet.
Je nachdem wie die eigentliche Aufgabe aussieht, kann es durchaus vorkommen, dass Django mehr ein Hindernis darstellt als eine Hilfe.

"Alles" selber machen muss man ja auch nicht, dazu gibt es dann ja web.py oder Werkzeug...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Y0Gi hat geschrieben:Ja, dass man erst Subklassen *muss* gefällt mir auch nicht.
blackbird: füge doch einfach fertige Subklassen für UTF-8 (und ggf. Latin-1) mit ein.
Das habe ich auch gemeint. Aber Paste #6447 ist jetzt auch nur etwas länger als 50 Zeilen und bindet sogar Jinja ein. Also dass muss man etwas relativieren.

Und dadurch dass es so nahm am WSGI-Kern ist, habe ich gestern auch problemlos die Session Middleware von ``flup`` und danach die von Beaver einbinden können.

Der Einstieg ist sicherlich einfacher, als der in Pylons.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Leonidas hat geschrieben:
Y0Gi hat geschrieben:Ja, dass man erst Subklassen *muss* gefällt mir auch nicht.
blackbird: füge doch einfach fertige Subklassen für UTF-8 (und ggf. Latin-1) mit ein.
Das habe ich auch gemeint. Aber Paste #6447 ist jetzt auch nur etwas länger als 50 Zeilen und bindet sogar Jinja ein. Also dass muss man etwas relativieren.
http://paste.pocoo.org/show/6502/ <- den context is None test braucht man nicht und globals sind ein dict, da kannst du update() verwenden.


//EDIT: Ihr habt mich überredet, utf-8 wird default
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gut, dass dass ein Dict ist, hätte mir auffallen können :oops:

Wegen dem UTF-8: Ich finde, dass das durchaus konsequent ist, Jinja verwendet so weit ich weiß auch UTF-8 als Default.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten