Gibt es ein Python-Komponenten-Framwork?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
deamon
User
Beiträge: 63
Registriert: Mittwoch 8. Oktober 2008, 11:14

Dienstag 28. April 2009, 17:54

Hallo,

gibt es ein Komponenten-Framework wie Apache Wicket für Python? Also ein Framework wo z. B. ein Eingabefeld oder ein Formular Objekte im Sinne der objektorientierten Programmierung sind?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 28. April 2009, 18:12

Sicher, Django newforms, WTForms oder zine.forms haben komponentenbasierte Formulare.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dienstag 28. April 2009, 20:41

Leonidas, dem würde ich gar nicht zustimmen. Wicket funktioniert grundsätzlich anders als Django mit newforms und wahrscheinlich auch WTForms (was in dem Crashkurs-Dokument genauso aussieht). zine.forms kenne ich nicht. Nagare (abgeguckt von Seaside) geht schon eher in diese Richtung.

Etwas wie Wicket wäre in der Tat für Python nicht schlecht. Meines Wissens gibt es da nichts Vergleichbares. Müsste man mal machen...

Stefan
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Dienstag 28. April 2009, 21:33

Wenn man sowas haben will sollte man sich für Python aber nicht unbedingt an Wicket orientieren. Nitrogen erscheint mir im Vergleich zu Wicket deutlich attraktiver.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 29. April 2009, 07:23

sma hat geschrieben:Leonidas, dem würde ich gar nicht zustimmen. Wicket funktioniert grundsätzlich anders als Django mit newforms und wahrscheinlich auch WTForms (was in dem Crashkurs-Dokument genauso aussieht).
Ich kenne Wicket nicht, bin nur nach der Beschreibung des OP gegangen.

Und Nagare scheint mir ziemlich tot zu sein. Der IRC-Channel ist total still und die Webseite war das letzte Mal als ich geschaut habe down.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 29. April 2009, 09:05

Etwas wie Apache Wicket könnte sich in Python so anfühlen.

Wir bauen ein Gästebuch, eine Webseite, auf der Leute Kommentare hinterlassen können.

Dies ist so ein Kommentar:

Code: Alles auswählen

class Comment(object):
    def __init__(self, text=""):
        self.text = text
        self.date = datetime.now()
Dies ist die Webseite. Sie ist eine Komponente und besteht aus weiteren Komponenten. Jede Komponente wird als Klasse realisiert:

Code: Alles auswählen

class GuestBook(web.Page):
    comments = [] # database
    
    def __init__(self):
        self.add(self.CommentForm("form"))
        self.add(self.CommentListView("comments", self.comments))

    class CommentForm(web.Form):
        def __init__(self, name):
            web.Form.__init__(self, name)
            self.comment = Comment()
            self.add(web.TextArea("text", web.PropertyModel(self.comment, "text")))
    
        def on_submit(self):
            GuestBook.comments.append(Comment(self.comment.text))
            self.page.comments.model_changed()
            self.comment.text = ""

    class CommentListView(web.ListView):
        def __init__(self, name, model):
            web.ListView.__init__(self, name, model)
    
        def populate_item(self, item):
            comment = item.model_object
            item.add(web.Label("date", comment.date))
            item.add(web.MultiLineLabel("text", comment.text))
Dazu kommt ein Template, das über die "wicket:id"-Marker an die Komponenten gebunden wird:

Code: Alles auswählen

<html><body>
<form wicket:id="form">
  <textarea wicket:id="text">...</textarea>
  <input type="submit"/>
</form>
<div wicket:id="comments">
  <p><span wicket:id="date">1.1.2004</span><br/><span wicket:id="text">...</span></p>
</div>
</body></html>
Nun braucht man noch etwas, das alles zusammenhält:

Code: Alles auswählen

class GuestBookApplication(web.Application):
    home_page = GuestBook
Meine direkte Translation von Java fühlt sich in Python noch etwas hölzern an. Wicket-Code wimmelt von inneren Klassen und impliziten Zuweisungen. Für Python musste ich beide Komponenten-Klassen explizit machen. Und es wimmelt dort nun von "self"s. Implizite Zuweisungen gibt es in Python nicht, an einer Stelle habe ich daher angenommen, dass ich mit ".comments" auf eine unter dem Namen "comments" hinzugefügte Komponente zugreifen kann. Und offenbar kommen alle Klassen des Rahmenwerks aus dem Modul "web".

Stefan
Antworten