Django richtige Wahl?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Hallo zusammen,

ich würde gerne meine erste Webanwendung schreiben, und zwar soll ein User in ein Textfeld auf der Homepage
Keywords eingeben können und daraufhin aus einer Datenbank alle Texte erhalten, die Treffer für die Keywords liefern.

Ich überlege nun was ich dafür wählen sollte, um das ganze umzusetzen bzw in was ich mich nun hineinarbeiten sollte.
Wäre Python + Django eine gute Wahl?
Zu beachten ist, dass die Datenbank recht groß werden soll und für möglichst viele User aus dem Internet gleichzeitig benutzbar
sein soll.
Ist Python+Django dafür eine gute Wahl? Oder hätte PHP mit MySQL Vorteile? Oder Ruby (on Rails)?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Weißt Du denn schon, wie Du technisch das Problem der Indizierung lösen willst? Dein Projekt klingt für mich im Moment eher danach, als gäbe es recht wenig UI-Elemente und Interaktion. Da spielt dann ein Framework eher die untergeordnete Rolle. Interessanter ist da eher der Data-Mining-Ansatz. Ist die DB festgelegt? Welche Mechanismen gibt es dort, Keywords zu finden?

Du kannst das sicherlich mit allen drei Sprachen umsetzen. Die Frage wäre eher, wieso Du auf Python kommst? Beherrscht Du denn bereits eine Sprache oder planst eine zu erlernen? Wenn ja, wäre das dann wohl die sinnvollste Wahl, denn einfach mal so eine Sprache für ein Projekt zu lernen wird Dir auf Dauer nichts bringen.

Generell kann man Django für so ziemlich alles nutzen. Verkehrt ist das also sicherlich nicht. Sollte ich mit meiner obigen Vermutung richtig liegen, wären allerdings auch kleinere Rahmenwerke a la flask oder gar bottle evtl. interessant.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

@Hyperion: Danke für die Antwort. Also Python und Ruby habe ich bereits gelernt, wobei ich in Ruby wohl schon etwas eingerostet bin, da ich mittlerweile
fast alles in Python mache. Von daher würde ich deswegen gerne den Data-Mining-Ansatz in Python schreiben. Habe mich nur gefragt, ob Django dafür die richtige Lösung ist, daher ich mich mit dem Framework noch nie beschäftigt habe.
PHP müsste ich erst lernen... wäre aber wohl machbar, falls dies große Vorteile hätte.

Ist dieses Buch auf dem aktuellen Stand in Sachen Django? Und zu empfehlen?
Definite Guide to Django - for Django 1.1
http://tinyurl.com/6l849yr
Zuletzt geändert von Barcellona am Dienstag 15. März 2011, 15:13, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also wenn Du fit bist in Python, dann nutze das auf jeden Fall. Und ob Du nun Django oder ein anderes Rahmenwerk nimmst hängt sicherlich auch von den Anforderungen ab. Zudem bildest Du Dich ja darin auch weiter, sprich Du kannst bei folgenden Projekten dann bereits auf Erfahrungen zurückgreifen. Wenn Du stark in Richtung Webapplikationen gehst, dann spricht einiges für Django.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Die Frage ist, ob es dir eher um das Indizieren geht oder ob du tiefer in die Webentwicklung einsteigen willst. Wenn nicht, solltest du auf jeden Fall ein Microframework (Flask, Bottle) anstatt Django aussuchen. Diese hat man sehr schnell erlernt und kann sich dann auf das Wesentliche konzentrieren.

Falls dir mehr an der Webentwicklung liegt, solltest du dir neben Django trotzdem noch eins der genannten Projekte anschauen und für dich entscheiden, welcher Ansatz dir persönlich eher zusagt. Ich persönlich konnte mit Django noch nie richtig warm werden.

Als Backend für diese Aufgabe kann ich MongoDB empfehlen, bei ersten Leistungstest (mit indizierten Webseiten) war das sehr performant. http://www.mongodb.org/display/DOCS/Ful ... h+in+Mongo

Edit: Falls dir MongoDB generell zusagt, findest du hier Ansätze in Python für das Indizieren und Suchen.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich werfe mal ein Eisen für Django ins Feuer. Auch wenn es schick ist, möglichst minimalistische Lösungen zu nehmen, hat Django halt den massiven Vorteil einer großen Community hinter sich. Meine Daumenregel wäre: nimm Django außer du weißt, dass du mit Django nicht glücklich werden wirst. Es gibt natürlich eine Menge Details die gegen Django sprechen aber auch ebensoviele die dafür sprechen. Einige Vorteile entdeckt man erst später, wenn man sie tatsächlich mal braucht, einige Nachteile erkennt man erst später wenn sie beginnen einen zu stören.

Aber für Feld-und-Wiesen-Projekte ist Django allemal eine gute Wahl. Zudem dieses Projekt ja keine allzu speziellen Anforderungen an das Framework stellt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Wie flexibel ist Django, falls man keine SQL-Datenbank verwenden möchte? Ist die Integration eines anderen Backends wie PyMongo problemlos möglich?
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

ms4py hat geschrieben:Wie flexibel ist Django, falls man keine SQL-Datenbank verwenden möchte?
Dann hat man ein Framework ohne SQL-Integration und damit fällt ein interessanter Teil weg.

Ich habe allerdings Django auch schon für ein Projekt eingesetzt, das als Datenquellen ausschließlich XML-Dateien und klassische Text-Dateien einsetzt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Irgend wer hier aus dem Forum entwickelt doch iirc an einem Ersatz-Backend auf MongoDB-Basis für Django mit? Inwiefern das bereits einsatzfähig ist, kann ich natürlich nicht sagen (wo mir schon der Bezug zum Nickname nicht einfallen will :-D )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
wo mir schon der Bezug zum Nickname nicht einfallen will
AFAIK "Dauerbaustelle".

Gruß, noisefloor
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Ich muss leider nochmal ein paar Anfängerfragen stellen...

Also, wenn ich eine normale Anwendung schreiben würde, würde ich die Datenbank (Textdateien) in einem Unterverzeichnis der Anwendung haben und diese
mit regulären Ausdrücken untersuchen, um die gewünschten Treffer zu finden.

Wie muss ich mir dies denn bei der Umsetzung als Webanwendung vorstellen?
Ich lade meine Django-Skripts dann auf den Webserver, genau wie die Textdateien und wenn ein User dann eine Eingabe macht, startet sich das Skript dazu auf dem Webserver und untersucht die Textdateien (die sich auch auf dem Server befinden). Die gesammelten Ergebnisse werden dann von Django per Template in eine HTML-Seite umgesetzt und dem User präsentiert.
Läuft das Ganze in etwa so ab? Wird Django bzw Python auch auf dem Webserver installiert? Oder wie kann der Server Python-Skripts starten?
Kann mir das jemand möglichst einfach erklären? :K
Vielen Dank!
BlackJack

@Barcellona: Na Du hast es doch im Grunde schon erfasst. Auf dem Server läuft ein Webserver und Django ist installiert, und deine Webanwendung auch. Der Benutzer fragt nach einer URL, dieser Wunsch wird vom Webserver an Django weitergegeben, Django weiss aufgrund Deiner Konfiguration, dass Deine Webanwendung für die URL zuständig ist, bzw. auch welche von Deinen Funktionen dafür aufgerufen werden soll. Und die Funktion kann dann aufgrund der Anfrage irgendein Ergebnis berechnen und das dann über ein Template formatiert an den Benutzer zurück schicken.

Für das beschriebene Szenario würden `Bottle` oder `Flask` allerdings auch dicke ausreichen.
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Danke, jetzt stehe ich allerdings noch vor weiteren Rätseln.

Was genau ist denn ein "Webserver"? Im Unterschied zu einem Server?
Ich habe zum Beispiel eine Homepage bei einem gratis Anbieter.
http://www.000webhost.com/features
Kann ich damit auch ein Django-Projekt umsetzen? Also eine Webanwendung?

Oder welche Vorraussetzungen brauche ich genau, um eine Webanwendung umsetzen zu können?
Wie installiere ich denn Django auf dem Server?

Ich arbeite mich gerade durch das Buch "Practical django Projects" http://tinyurl.com/4gvzxw7 , aber dort wird kann nicht erklärt, wie man die Beispielprojekte dann wirklich auf den Server bekommt :|
BlackJack

@Barcellona: Mit Server meinte ich den Rechner. Und mit Webserver das Programm was da drauf läuft und auf HTTP-Anfragen von Client-Programmen wartet, also zum Beispiel Webbrowsern. Sehr weit verbreiteter Webserver ist beispielsweise der Apache. Zum Entwickeln und Testen haben die meisten Rahmenwerke für Webanwendungen auch einen eingebauten Webserver.

Dein Hoster scheint kein Python zu unterstützen und wahrscheinlich auch nicht genug Rechte und Zugangsmöglichkeiten um da irgend etwas selber zu installieren. Würde ich bei einem kostenlosen Angebot aber auch nicht erwarten.

Für eine Django-Webanwendung brauchst Du einen Server (also den Rechner) und darauf einen Webserver, eine SQL-Datenbank, Python, Django, und Deine Webanwendung. Der Webserver muss mindestens CGI unterstützen. Besser wäre es aber wenn er eine schnellere und direktere Anbindung an Python erlauben würde. Beim Apache zum Beispiel über die Apache-Module `mod_wsgi` oder `mod_python`. Wenn bei der Datenbank nur selten schreibend zugegriffen wird und man gleichzeitige Schreibzugriffe von mehreren Benutzern nahezu ausschliessen kann, könnte dafür unter Umständen auch eine SQLite-Datenbank ausreichen. Sonst braucht man noch ein DBMS wie MySQL oder PostgreSQL.

Zum Deployment gibt es etwas in der Django-Dokumentation und da ist auch ein Link zur Online-Version des "Django-Buchs".
Antworten