Suche Static-Python-CGI-CMS... oder so...

Django, Flask, Bottle, WSGI, CGI…
Antworten
MarkusMerk
User
Beiträge: 5
Registriert: Donnerstag 25. August 2011, 21:08

Hola,

momentan bastel ich an einem CMS, worin das Backend mit Python (cgi) läuft. Die fertige Webseite wird dann generiert und ist komplett statisch. Hat jemand schon mal von einem Projekt dieser Art gehört, was man sich zwecks Lerneffekt mal anschauen könnte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was meinst Du mit Backend? Quasi den Adminteil, der CRUD Arbeiten ermöglicht?

Ich meine mich zu erinnern, dass es für Werkzeug mal eine Anwendung gab, die statische Seiten aus Textdateien generiert hat. Wenn man natürlich einen Admin-Teil hat, böte es sich ggf. an, mal bei Django zu gucken, ob es da etwas vergleichbares gibt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich meine es gibt Django-Apps (z.B. http://superjared.com/projects/static-generator/ ), die aus den Seiten dann HTML-Dateien erzeugt. Ich wollte immer mal ein Plugin für PyLucid schreiben, das das macht. Schön wäre es, wenn dann die Seiten per FTP auf einen Server geladen werden. Aber da ich das nicht wirklich brauche...

Eine Allgemeine Lösung wäre ein WGET Aufruf ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

eine ziemlich komplette Übersicht über exisiterende CMS gibt es hier: http://www.cmsmatrix.org. Keine Ahnung, ob man da nach der Programmiersprache filtern kann...

Wobei das Konvertieren einer Template / Markup-Sprache nach HTML ja nicht das Problem ist. Die Frage ist eher, was dein Backend können soll.

Gruß, noisefloor
MarkusMerk
User
Beiträge: 5
Registriert: Donnerstag 25. August 2011, 21:08

Danke für die Antworten soweit.

Wahrscheinlich sollet ich mich etwas genauer ausdrücken. Mit Backend ist tatsächlich der Adminteil für CRUD gemeint. Es ist über den Browser aufrufbar und liegt in cgi-bin/. Die "Datenbank" ist praktisch nur eine Textfile, worin die ganzen Instanzen eines 'Article'-Objektes liegen, ganz simpel also. Mittels dieser Instanzen und diverser Templates (string.Template) wird dann die Seite im webroot gebacken. Django oder WSGI wird nicht benutzt.

Das ist natürlich eine relativ spezielle Angelegeheit, und deshalb frage ich auch hier, da ich über google nichts gefunden habe. Auch angefangene oder veraltete Projekte dieser Art wären interessant.

Bei cmsmatrix.org kann man leider nicht wirklich filtern, das macht das Suchen zu einer Lebensaufgabe.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was willst Du denn dann eigentlich wissen? Ich meine, wo liegt Dein Problem?

Dass Dein Ansatz veraltet ist, weißt Du ja. Also was erwartest Du Dir? Aus anderen "alten" Ansätzen lernen? Das beste, was es zu lernen gibt, wäre einfach schon mal auf plain cgi zu verzichten und sich ein ordentliches Framework für den CRUD Teil zuzulegen.

Wo liegt eigentlich der Vorteil einer solchen Lösung gegenüber einer sofortigen dynamischen? Ich meine, wenn Du die Seiten lokal erzeugen würdest, um sie dann auf einen simplen Webspace hochzuladen, kapiere ich den Usecase ja noch. Aber wenn Du für den CRUD-Part eine Web-App laufen lässt, wieso nicht gleich auch für die Präsentation?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MarkusMerk
User
Beiträge: 5
Registriert: Donnerstag 25. August 2011, 21:08

Nein, "veraltet" ist der Ansatz sicher nicht. Für mich hat ein Framework keinerlei Vorteile.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MarkusMerk hat geschrieben:Nein, "veraltet" ist der Ansatz sicher nicht. Für mich hat ein Framework keinerlei Vorteile.
Hui... da hol ich schon mal Popcorn raus :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MarkusMerk
User
Beiträge: 5
Registriert: Donnerstag 25. August 2011, 21:08

Ok, scheinbar weißt Du wofür, in welcher Umgebung und unter welchen Bedungungen ich das schreibe.... Interessant.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Auch wenn man mit gutem Caching eine Menge erreichen kann, sind statische Seiten IMHO immer noch das schnellste. Denn der Inhalt selten geändert wird, also quasi statisch ist, dann macht das schon Sinn. Wenn man Server-Zeit einsparen will...

Wie gesagt, eine sehr einfach Möglichkeit wäre ein kleines Skript mit einem wget Auffruf, siehe z.B.: http://wiki.ubuntuusers.de/wget#Website ... -speichern

Bei der Lösung spielt das Backend eigentlich keine Rolle...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@MarkusMerk: Er weiß bestimmt nicht, wofür Du Deine Anwendung schreibst, doch er weiß aus Erfahrung, dass mindestens 80% solcher Anwendungen von einem Rahmenwerk (oder Teilen desselben) profitieren können.

Ein Rahmenwerk bietet Dir fertige, getestete und gut gewartete Lösungen für all die Probleme, welche Du bei einer reinen CGI-Anwendung früher oder später selbst lösen musst. Dazu gehört insbesondere das Parsen und Zusammensetzen von HTTP-Headern, worauf wiederum viele andere Dinge wie Cookie-Behandlung, Authentifizierung, Redirects, Caching, usw. aufbauen, alles Sache, die so ziemlich jede Webanwendung (und mit ziemlicher Sicherheit auch Deine) zumindest teilweise benötigt.

Insofern ist zumindest der Einsatz einer grundlegenden Bibliothek wie Webob oder Werkzeug ratsam, und vor diesem Hintergrund kann man durchaus sagen, dass reines CGI eine vollkommen veraltete Technologie ist. Ist das Rahmenwerk oder die Bibliothek WSGI-kompatibel (was bei allen modernen Bibliotheken und Rahmenwerken der Fall ist), so kann man es auch über CGI betreiben.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was ich (noch?) nicht verstehe: Statische HTML-Seiten ausliefern - ok, kann Vorteile haben. Aber wozu ist das Online-Backend? Du kannst doch genau so gut die Seiten offline generieren und dann hochladen.

BTW: Wie willst du das HTML eigentlich generieren? Mit einer Markupsprache?

Gruß, noisefloor
deets

@noisefloor

Wenn du deine beiden Fragen kombinierst, hast du die Antwort.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Hyperion hat geschrieben:Wo liegt eigentlich der Vorteil einer solchen Lösung gegenüber einer sofortigen dynamischen?
Es ist verdammt schwer, selbst mutwillig, bei einer komplett statischen Lösung eine Sicherheitslücke einzubauen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Darii hat geschrieben:Es ist verdammt schwer, selbst mutwillig, bei einer komplett statischen Lösung eine Sicherheitslücke einzubauen.
Ich bin ja nicht dämlich... hättest Du den Satz nicht aus dem Zusammenhang gerissen, wäre die Intention meiner Frage offensichtlich gewesen. noisefloor hat ja letztlich das gleiche hinterfragt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Geht es um einen static site generator wie https://github.com/koenbok/Cactus oder https://github.com/lakshmivyas/hyde ? Beide sind nach dem Vorbild von https://github.com/mojombo/jekyll gebaut, welches mit http://octopress.org/ eine nette Oberfläche bekommen hat.

Stefan
MarkusMerk
User
Beiträge: 5
Registriert: Donnerstag 25. August 2011, 21:08

@hyperion, noisefloor:
Das Online-Backend deswegen, weil verschiedene Benutzer von verschiedenen Systemen darauf zugreifen. Und die Seite soll aus folgenden Gründen statisch sein: kaum Rechnerlast und keine Angriffspunkte. Dynamische Funktionen (wie Suche, Filter, Kommentare etc.) werden nicht benötigt.

jens hat geschrieben:Wie gesagt, eine sehr einfach Möglichkeit wäre ein kleines Skript mit einem wget Auffruf, siehe z.B.: http://wiki.ubuntuusers.de/wget#Website ... -speichern
Bei der Lösung spielt das Backend eigentlich keine Rolle...
Da wäre ich gar nicht drauf gekommen - nur macht wget natürlich erstmal blöde urls (index.html?action=display&id=12345.html), die dann wieder umgeändert werden müssten. Da ist das generieren per Python praktischer, denke ich.

lunar hat geschrieben:...
Ein Rahmenwerk bietet Dir fertige, getestete und gut gewartete Lösungen für all die Probleme, welche Du bei einer reinen CGI-Anwendung früher oder später selbst lösen musst. Dazu gehört insbesondere das Parsen und Zusammensetzen von HTTP-Headern, worauf wiederum viele andere Dinge wie Cookie-Behandlung, Authentifizierung, Redirects, Caching, usw. aufbauen, alles Sache, die so ziemlich jede Webanwendung (und mit ziemlicher Sicherheit auch Deine) zumindest teilweise benötigt.
...
Das sehe ich ein, auch wenn ich zugeben muss dass ich die Zusammenhänge und Strukturen von Frameworks noch nicht so ganz verstehe (dieser Forenthread war übrigens ganz nett zu lesen). Doch die von dir genannten Probleme betreffen mich nicht. Glaube ich.


@sma:
Hyde sieht schon mal gut aus, auch wenn es anscheinend auf Django-Template aufbaut. Werd ich mir anschauen.


Zur Verdeutlichung der Arbeitsweise mal ein kleines Beispiel, was das Backend so macht:

Code: Alles auswählen

>>> from src.articlehandler import ArticleHandler
>>> ah = ArticleHandler()
>>> id_ = ah.add_article()
>>> ah.edit_article(id_, folder='/foo', title='bar', text='blubb', lang='de', type_='static')
>>> ah.get_articles()
[ {'status': 1, 'text': u'blubb', 'date': '2000-01-01', 'data': '', 'id': 39842, 'lang': u'de', 'title': u'bar', 'author': 'cms-software', 'type_': 'static', 'timestamp': '2011-08-27-10:45:06', 'folder': u'/foo'}]
>>> ah.get_filenames()
[u'/foo/bar/index.html.de']
Man legt praktisch nur eine Liste von Disctionaries an, welche die Artikel sind. Daraus werden dann entsprechend den Eigenschaften die Dateien im Webroot generiert.

Ich bin zwar schon klüger geworden hier, aber anscheinend gibt/gab es kein vergleichbares Projekt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Darii hat geschrieben:
Hyperion hat geschrieben:Wo liegt eigentlich der Vorteil einer solchen Lösung gegenüber einer sofortigen dynamischen?
Es ist verdammt schwer, selbst mutwillig, bei einer komplett statischen Lösung eine Sicherheitslücke einzubauen.
Wobei, wenn das Backend online ist, dann hat man da das selbe Problem, wie mit allen Web-Apps ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten