[HowTo] Webprogrammierung mit Python

  • Hallo, ich habe mich die letzten Wochen intensiv mit der Webentwicklung in Python beschäftigt und möchte nun mein Wissen mit euch teilen und euch zeigen wie man einfach mit Python Dynamische Webinhalte erstellen kann.

    Inhalt:

    • Einleitung
    • Die Wahl des passenden Frameworks
    • Was ist Karrigell und warum soll Karrigell erklärt werden
    • Die Installation von Karrigell
    • Die Einrichtung von Karrigell
    • Hallo Welt
    • Debug
    • Sicherheit



    1. Einleitung
    Kein Thema ist so umstritten wie die Python-Webentwicklung. Einige glauben noch immer, dass es da nichts Gescheites gibt. Der junge WSGI-Standard zeigt jedoch auf, dass Python im Web funktioniert, sehr schnell ist, eine Zukunft hat und überhaupt nicht in den Kinderschuhen steckt. Ganz im Gegenteil.


    2. Die Wahl des passenden Frameworks
    Grundsätzlich gibt es zwei Arten von Frameworks. Einmal die Runumsorglos-Variante wie Django, die reichlich Features bieten. Auf der anderen Seite gibt es die Minimalisten. Was nun für jeden einzelnen das beste ist kann pauschal nicht beantwortet werden. Es ist abhängig davon welche Art von Anwendung man entwickeln möchte, wie viel Zeit investiert werden soll. Wenn zum Beispiel ein Content-Management System entwickelt werden soll sind Full-Featured Framework wie Django gut geeignet, für eine kleine Informationsseite jedoch eher weniger.


    Minimale Frameworks sind besser anpassbar wie die großen, auch die Einarbeitung ist in der Regel etwas einfacher. Jedoch muss man bei kleinen Frameworks damit rechnen das man sich seine Dokumentation wenn vorhanden Mühsam zusammensuchen muss.


    3. Was ist Karrigell und warum soll Karrigell erklärt werden?
    Um den interessierten das Thema Webentwicklung in Python nahe zu bringen habe ich mich bewusst für Karrigell entschieden da es ein komplettes System ist. Es bietet einen eigenständigen Server kann aber auch ohne Probleme mit Apache verwendet werden. Der größte Vorteil von Karrigell ist das es sehr gut für Einsteiger geeignet ist, alleine schon aus dem Grund das lange und aufwendige Konfigurationen entfallen und sofort angefangen werden kann. Leider ergeben sich auch zwei große Nachteile zum einen ist Karrigell nicht WSGI konform wo durch es in der Regel nicht für den Shared-Webhostingbereich geeignet ist.


    Im folgenden werde ich erklären wie man Karrigell auf seinem Vserver installiert und eine kleine Anwendung schreibt. Wer Karrigell mit seinem Apache nutzen möchte findet die notwendigen Informationen in der offiziellen Dokumentation.


    4. Die Installation von Karrigell
    Die Installation von Karrigell ist sehr einfach. Das Programm ist geschrieben in Python und benötigt zum Ausführen Python. Als erstes müssen wir unseren Debian Host vorbereiten indem wir Python installieren mit einem


    Code
    apt-get install python-all

    Ab jetzt sind keine root Rechte mehr notwendig!
    Als nächstes Laden wir Karrigell runter mit

    Code
    wget http://sourceforge.net/projects/karrigell/files/Full%20package/Karrigell-3.0.3/Karrigell-3.0.3.tar.gz/download

    und entpacken es mit


    Code
    tar xzf [URL='http://sourceforge.net/projects/karrigell/files/Full%20package/Karrigell-3.0.3/Karrigell-3.0.3.tar.gz/download']Karrigell-3.0.3.tar.gz[/URL]

    Karrigell ist nun erfolgreich auf dem System installiert.


    5. Die Einrichtung von Karrigell
    Die Einrichtung ist recht einfach. Im Karrigell Hauptordner befinden sich unter anderem die Ordner www und data im www Ordner befinden sich Beispiele die als Defaultseite dienen. Protokolle werden unter anderem im data Ordner gespeichert. Nun wollen wir uns einen Virtuellen Host anlegen. Dazu wechseln wir in den Karrigell Ordner. Wir wollen uns nun für die Domain domain.ltd erstellen. Dazu erstellen wir uns erst einen Ordner für die Inhalte mit einem


    Code
    mkdir domain

    danach noch den data Ordner mit


    Code
    mkdir data/domain

    Als nächstes ist es Notwendig eine Konfiguration zu erstellen. Dazu kopieren wir uns die Default Konfiguration in unseren domain Ordner mit einem


    Code
    cp default_host_conf.py domain/conf.py

    Jetzt passen wir noch unsere so eben kopierte conf.py an. Öffne diese am besten mit nano oder einem beliebigen anderen Editor und passe die Einträge root_dir und data_dir an. Das ganze sollte danach so aussehen:


    Code
    root_dir = os.path.join(server_dir,"domain")
    data_dir = os.path.join(server_dir, "data","domain")

    Nun müssen wir noch die hosts Datei im Karrigell Hauptverzeichnis anpassen. Diese Datei wurde noch nicht erzeugt weil diese erst beim ersten Start das Servers geschrieben wird. Der Einfachheit halber starten wir Karrigell jetzt einfach einmal um unsere hosts zu bekommen. Starte Karrigell einfach durch die Eingabe von:


    Code
    python Karrigell.py

    beenden kannst du den Server wieder durch die Eingabe von Strg+C.
    Jetzt sollte die hosts vorhanden sein. Wir fügen noch folgende Zeile ein:


    Code
    domain.ltd domain/conf.py

    Nun können wir Karrigell starten und unsere Domain domain.ltd nutzen.


    6. Hallo Welt
    Erstelle in deinem Domain Ordner einfach eine Datei namens hallo.py und schreibe folgende Zeile hinein:


    Code
    print „Hallo Welt“

    Speichere das ganze und besuche jetzt in deinem Browser deine erstellte Domain. In Diesem Fall http://domain.ltd/hallo.py . Im Browser bekommst du nun „Hallo Welt“ angezeigt.


    Kurz erklärt bekommt dein Browser eine html Seite erstellt aus deinen print Anweisungen. Es können im Prinzip alle Funktionen von Python verwendet werden. Auch statische html Seiten können eingebunden werden als Beispiel einen kleinen header


    header.html:

    Code
    <h5>Titel</h5>

    hallo.py:

    Code
    Include(„header.html“)
     print „Hallo Welt“

    Eine einfache Übersicht mit einigen einfach zu verstehenden Beispielen findest du unter http://www.karrigell.fr/doc/en/tour/tour_en.pih


    7. Debug
    Erstellte Anwendungen können sehr leicht geprüft werden. Bei einem Fehler in einem der Skripte wird eine entsprechende Meldung im Browser angezeigt. Die Debug Funktion kann auch abgeschaltet werden über die conf.py. Ein kleines Beispiel zeigt die Debug Funktionalität.
    Ein Beispiel:


    Code
    print blah

    Ergibt die folgende Meldung:

    Code
    Error in hallo.py Line 2     print blah NameError: name 'blah' is not defined                Traceback (most recent call last):   File "/homez.151/karrigel/www/karrigell/core/HTTP.py", line 335, in process_request     target.run(self.ns)   File "/homez.151/karrigel/www/karrigell/core/k_target.py", line 390, in run     exec (self.py_code,namespace)   File "", line 2, in ? NameError: name 'blah' is not defined

    8. Sicherheit
    Das Thema Sicherheit soll hier nur kurz besprochen werden. Wenn als Server Apache verwendet wird ist dieser entprechen zu sichern. Bei dem in Karrigell enthaltenen Server sind erst einmal keine besonderheiten zu beachten, außer das dieser nicht als root laufen sollte. Grundsätzlich gelten die selben Regeln wie auch bei der nutzung von PHP. Der Debug Modus sollte aus sein, so können Fehler in Skripten nicht so einfach gefunden werden. Allgemein läßt sich sagen das die größte Sicherheitslücke das eigene Programm ist. Durch unsaubere Programmierung könnte zum Beispiel Python Code aus fremden Quellen ausgeführt werden. Dies gilt es zu beachten. Die Debug Funktion kann über die conf.py ein/ausgeschaltet werden.


    9. Schlusswort / Links
    So, ich bin an dieser Stelle wieder einmal am Ende angekommen. Wer Python beherscht sollte mit diesem kurzeinstieg und der Dokumentation von Karrigell schnell und Problemlos eigene Inhalte erstellen können. Als kleines Beispiel habe ich ein kleines Spiel geschrieben. Zahlenraten. Wer es sich mal ansehen will kann es hier laden: http://forum.netcup.de/attachment.php?attachmentid=88&stc=1&d=1263073823 Gestartet wird es durch den Aufruf von zahlen.py. Es handelt sich nur um eine tar.gz Datei, das .zip ist nur vorhanden weil nur zip Archive als Upload möglich sind :) Auch Live kann mein Zahlenraten gespielt werden unter http://zahlenspiel.jeegeek.net:5123/



    Über ein Feedback freue ich mich natürlich gerne :)


    Offizielle Seite: http://www.karrigell.fr/doc/en/
    Dokumentation: http://www.karrigell.fr/doc/en/reference.ks/
    Python Handbuch: http://de.wikibooks.org/wiki/Python_unter_Linux:_ALLES
    Zahlenraten: http://zahlenspiel.jeegeek.net:5123/


    In diesem Sinne

  • Nachtrag:
    Ich habe nun noch mal ein kleines Beispiel für alle Interessierten geschrieben welches die Möglichkeiten besser zeigt als das alte Zahlenraten Spiel. Ich habe das Spiel noch einmal neu geschrieben, diesmal verpackt in nur eine einzige Datei. Wer es testen will darf es gerne spielen :)


    Neues Zahlenspiel: http://zahlenspiel.jeegeek.net:5123
    Source: http://forum.netcup.de/attachment.php?attachmentid=89&stc=1&d=1263142571


    In diesem Sinne

  • Zitat von Zivilist;12035

    mein Prof für Informatik schwört auf Python.
    Vielleicht sollte ich mir des mal anschauen ;)


    Es gibt ja bei Karrigell mehrere Möglichkeiten sein Ziel zu erreichen.



    Je nach Anspruch muss man auswählen. Ich persönlich bevorzuge Karrigell Services weil ich so möglichst viel in einem Skript habe. Wenn es darum geht mit verschiedenen Landessprachen zu arbeiten ist Karrigell Templates die bessere Wahl. Bei Seiten die einfach zum Beispiel eine Information auslesen sollen und diese Einbinden wäre Python Inside HTML am besten.... Man kann aber auch alle Arten mischen, auch wenn ich das für Sinnfrei halte :)


    Es ist eine Glaubensfrage mit welchem System man Programmiert. PHP ist eben derzeit der Renner. Für mich macht das aber keinen Sinn jetzt extra noch PHP zu lernen wenn ich Python schon beherrsche.


    Aber wie gesagt Glaubensfrage :)


    In diesem Sinne

  • Ist Python nicht schneller als PHP?
    Ich arbeite eigentlich mit PHP, weil die gängigen CMS Lösungen in PHP geschrieben sind.
    Ich habe mir jedoch vorgenommen, sobald ich ein wenig mehr Zeit finde ein eigenes CMS zu schreiben. Für mich ist es daher eine Überlegung wert, dieses in Python zu schreiben. (Ich find die Technik, mit dem einrücken anstatt der Klammern echt genial. Da jeder gute Programmierer so schreibt, braucht man sich eigentlich nicht umstellen. :cool: )
    --> also spart Python unheimlich viel Code. --> ergo müsste es doch schneller sein.


    (PS. Vielen Dank an Christian für die kleine Einführung :D)

  • Zitat von Zivilist;12039


    --> also spart Python unheimlich viel Code. --> ergo müsste es doch schneller sein.


    nur aus dem gedanken heraus, ich denke es ist dem interpreter wurscht ob er nun die klammern oder die einrückungen checken muss, beides kostet zeit ;)

  • Da würde ich fast behaupten, der Parser braucht mehr Zeit, weil er den Anfang jeder Zeile ganz genau kontrollieren muss, und das dann in immer tieferen Ebenen :D


    christian: Netter Einstieg, aber ich glaube genau durch die fehlenden Klammern lasse ich lieber die Finger von Python :cool:



    Mfg Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat von Zivilist;12035

    mein Prof für Informatik schwört auf Python.


    Ja, das kann ich gut verstehen.
    Da ich nicht nur in punkto Kommunikation tätig bin, sondern auch
    im Bereich BioInformatik, mußte ich in letzter Zeit feststellen, das Python
    die bevorzugte Scriptsprache ist, oder sich zumindest dahin entwickelt.


    Wobei BioRuby und BioJava auch nicht zu verachten sind.


    Ich weiß nicht, ob hier BioInformatiker im Forum sind, oder ob es User
    gibt, die sich für BioInformatik interessieren. Daher erlaube ich mir ganz
    einfach auf ein paar Seiten aufmerksam zu machen.


    1. BioPython -- http://biopython.org/wiki/Biopython
    2. Python course in Bioinformatics -- http://www.pasteur.fr/recherch…rmation/python/index.html
    3. Programming Course for Biologists at the Pasteur Institute -- http://www.pasteur.fr/formation/infobio/python/


    ..und mit Blick links und rechts des Weges Python


    1. Open Bio Informatics -- http://www.open-bio.org/wiki/Projects
    2. BioRuby -- http://www.bioruby.org/
    3. BioJava -- http://biojava.org/wiki/Main_Page
    4. BioPerl -- http://bioperl.org/wiki/BioPerl


    Jetzt noch ein kleines Schmankerl...


    BioHacker, oder Do It Yourself Biologic, oder: wie clone ich meine Oma
    DIYbio -- http://diybio.org/


    New York: DNA Extraction Party (was es alles für Partys gibt :D)
    http://diybio.org/2009/09/24/d…ork-dna-extraction-party/


    Ich hoffe, das wenige an Off Topic beeinträchtigt diesen Thread nicht allzusehr :)


    Gruß,
    Sunshine