Python + Flask (Entstehung einer Webapplikation)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Python + Flask (Entstehung einer Webapplikation)

    Anzeige
    Hallo zusammen,
    gleich vorweg: Ich weiß, dass man in diesem Bereich keine Webseiten verlinken darf. Deswegen habe ich mit sam Rücksprache gehalten und er hat mir grünes Licht gegeben!
    Dann noch der Hinweis, dass ich kein Profi auf dem Gebiet bin, sondern ich mir lediglich grad selbst die Sprache Python beibringe. Dennoch beantworte ich gerne Fragen, sofern ich mich dazu im Stande fühle!

    So, dann wollen wir mal.
    Auf das Projekt bin ich durch einen Freund gekommen, welcher ebenfalls Webapplikationen in Python schreibt. Ich werde das Mikroframework Flask verwenden, da es schlank und handlich ist. Alles was man sonst noch braucht wie z.B. bcrypt, wird einfach dazu importiert.

    Allgemeines
    Die ersten Schritte kann ich hier leider nicht mehr einzeln aufzählen, da ich schon wieder vieles verworfen oder stark modifiziert habe!
    Dennoch sollte die Anwendung folgendes beherrschen:
    • Login
    • Blog
    • Forum
    • Kommtare (wahlweise über das Forum oder dediziert)
    • ausgedehntes Rechtesystem
    • Private Nachrichten

    Weiteres wird sicher noch folgen, aber damit habe ich schon einiges zu tun!
    Ihr findet die Seite unter 212.224.88.90
    Für das Template wird Bootstrap verwendet. Das Design steht aber erstmal hinten an! Es fehlt auch noch eine Startseite, ich bitte solche Sachen zu verzeihen!

    Die Datenbank
    Als Datenbank verwende ich eine PostgresSQL. Dank SQLAlchemy ist es aber letzendlich egal, ob ihr eine SQLite oder MySQL verwendet. Die Tabellen werden intern als Objekte gemapt, so dass ihr wenig mit SQL an sich zu tun habt. Zudem werden auch non SQL Datenbanken wie z.B. MongoDB unterstützt, doch damit kenne ich mich leider nicht aus.

    Folgende Tabellen habe ich erstellt (Primärschlüssel sind unterstrichen und Fremdschlüssel mit einem F gekennzeichnet) :
    • User (id, username, firstname, lastname, email, password, role_id (F), warnings, banned, deleted, registrationDate, aboutMe, aboutMe_HTML, signature, signature_HTML, validated, token)
    • User Settings (id, userID (F), showEmail, recieveEmail, showRealName, showSignature, deleted)
    • Rollen (id, name, deleted)
    • Permissions (id, roleID (F), writeBlogPosts, readBlogPosts, createCategories, writeForumPosts, readForumPosts, createForums, moderateForums, deleteForums, deleteForumThreads, moveForumThreads, writeMessages, readMessages, accessMailbox, editUser, warnUser, banUser, deleted)
    • Blog Posts (id, authorID (F), timestamp, title, headline, text, text_html, postType, videoURL, order, categoryID (F), metadescription, metakeys, deleted)
    • Blog Kategorien (id, name, deleted)
    • Forum (id, name, order, category (F), deleted)
    • Forum Kategorien (id, name, order, deleted)
    • Forum Threads (id, subject, order, threadOpener (F), firstPost (F), forumID (F), isClosed, isSticky, isGlobalSticky, deleted)
    • Forum Posts (id, authorID (F), subject, timestamp, text, text_html, lastEditDate, lastEditor (F), threadID (F), forumID (F), deleted)
    • Private Messages (id, sender, reciever, subject, text, text_html, read, deleted)

    Erstellt aber noch nicht in der Anwendung implementiert:
    • User Warnings (id, userID (F), warningText, timestamp, deleted)
    • User Ignore (id, userID (F), ignoredUserID (F), deleted)
    • Sidebars (id, title, content, order, deleted)
    Die Felder bzw. Spalten werde ich im ersten Edit nachpflegen

    Natürlich werde ich diesen Post immer wieder ausbauen, um euch eine komplette Übersicht zu liefern und vielleicht den ein oder anderen hier Python näher zu bringen.
    Noch der Hinweis: Es muss sich niemand auf der Seite anmelden, doch die, die es testen wollen dürfen dies gern tun!

    Zudem würde ich mich auch sehr über Feedback freuen. Vielleicht lerne ich hier den ein oder anderen Python Programmierer kennen :)

    mfg
    Glenvan
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von classicLPer () aus folgendem Grund: URL aktualisiert

  • So, nach gut einer Woche hat sich einiges getan:

    Neu
    Allgemeines
    • Homepage samt Slider für Video Posts
    • Die letzten 10 News auf der Startseite (wird noch variieren)
    • Einführung des Meta Daten Blocks (keywords, description, ...)
    • Routine zum Passwort zurücksetzen (Link, Formulare, E-Mail
    • Benachrichtigung) - eigentliche Logik fehlt noch, es handelt sich um
    • einen Dummy!

    Blog
    • Eine Video Auswahl befindet sich im Single View, sofern es sich um ein Video Post handelt
    • Posts können nun bearbeitet werden, sofern man der Autor oder Administrator ist
    • Zusätzlich zur Folgenauswahl gibt es nun eine einfache Navigation zur nächsten oder vorherigen Folge

    Forum
    • Man kann nun seine Posts bearbeiten
    • Die letzten 5 Beiträge im Forum Index (mögliche Ausweitung auf die Sidebar)
    • Letzte Aktivität in der Foren Übersicht

    User und Berechtigungen
    • Berechtigte Personen können nun andere User editieren und Rollen ändern
    • Neue Berechtigungen: Foren Themen verschieben und löschen, User editieren, verwarnen, bannen

    Update
    Allgemeines
    • Der Changelog ist nun umgezogen zu... Changelog, um der finalen Homepage zu weichen
    • Der Slider führt nun zum Post und nicht mehr zur Blog Übersicht
    • Diverse fehlende Titel hinzugefügt
    • Subscribe Button vorübergehend entfernt

    Blog
    • Blog Posts sind nun in einer Übersicht und einem Single View unterteilt
    • Für Video Posts wurde ein Feld für die Folgennummer hinzugefügt

    Forum
    • Das Löschen von Foren wurde angepasst (derzeit werden alle Themen und Beiträge mitgelöscht)

    User
    • Optische Anpassungen am User Edit
    • Beiträge und Themen eines Users in Form gebracht
    Über Feedback würde ich mich sehr freuen! :)
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest
  • Ein zahlreichen Tassen Kaffee und viel Frust habe ich es nun geschafft die HTML Tags zu parsen. Es wird dabei eine Whitelist für Tags angelegt und eben nur diese Tags werden auch übersetzt. So kann man flexibel einstellen, was man innerhalb des Posts mit HTML anstellen darf und was eben nicht. Natürlich habe ich sicher noch nicht alles abgedeckt, aber immerhin können keine unliebsamen Skripte eingeschleust werden. Falls doch, gebt mir bitte Feedback :)

    Hier mal der Changelog von gestern und heute:

    Neu
    Allgemein
    • HTML Tags zum Teil erlaubt (Forum und Blog)
    • Links werden automatisch umgewandelt
    • WYSIWYG Editor (TinyMCE)
    Forum
    Global anpinnbare Themen (werden in allen Foren angezeigt und stehen noch über den angepinnten Themen)

    Update
    Allgemein
    • Folgende Seiten verwenden nun auch den Editor samt HTML Parsing: About Me, Signatur, Private Nachrichten
    Forum
    • angepinnte Themen können nun auch aus der Forenansicht moderiert werden, wie die normalen Themen
    Private Nachrichten
    • Optische Anpassungen
    Fix
    Forum
    • Es werden nun korrekt die IDs der Autoren in die Datenbank gespeichert, anstatt das gesamte Objekt
    Edit: Dank eines Users konnte ich ein paar Probleme beheben bzw. eindämmen:
    • Bei der Anmeldung eines neuen Users sind keine Sonderzeichen mehr zulässig
    • Sämtliche URLs wurden auf das Verarbeiten von IDs umgeschrieben
    Bei der Gelegenheit habe ich auch noch folgendes Update mit hochgeladen:
    • Der Editor hat folgende neue Funktionen: Ausschneiden, Kopieren, Einfügen, unsortierte Liste, sortierte Liste und Links
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von classicLPer () aus folgendem Grund: Update nach Feedback

  • Nun habe ich mir mal ein paar Gedanken über ein Kommentar System gemacht und bin zum Ergebnis gekommen, dass ich gerne das Forum dazu nutzen möchte.
    Beim Erstellen eines Forums kann man nun auswählen, ob es als Kommentarbereich dienen soll und wenn ja, welche Blog Kategorie dieses nutzen soll. Sobald man nun einen Post innerhalb einer verknüpften Kategorie erstellt, wird automatisch ein Thema im Forum erstellt. Mehr kann es leider aber auch nicht. Weder beim löschen noch editieren wird das Thema angepasst. Aber ich habe ja bald Urlaub, wo ich mich dann um die Feinheiten und fehlenden Funktionen kümmern kann. :)
    Ansonsten habe ich nur noch einen Bug gefixt, welcher einen Fehler verursacht hat, sobald man eine neue PN schreiben will.

    Hier der Changelog:
    Neu
    Blog
    • Beim Erstellen eines Posts in einer Kategorie, welche einem Forum als Kommentarbereich zugewiesen wurde, wird ein Thema im jeweiligen Forum eröffnet
    Forum
    • Beim Erstellen eines Forums kann man nun Blog Kategorien zuweisen, um das Forum als Kommentarbereich zu nutzen
    Fix
    Private Nachricht
    • Nachricht schreiben (ohne Übergabe eines Empfängers) löst keinen Fehler 500 mehr aus
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest
  • Anzeige
    Leider hatte ich in den letzten Tagen nicht allzuviel Zeit, aber hier mal ein kleines Update: 212.224.88.90:5000/blog/view/12
    Ich habe dem Kommentar System den finalen Schliff gegeben, es fehlen aber noch die Funktionen des Löschens und Verschiebens. Das Erstellen klappt nach wie vor super und nun sind auch Blog und Forum miteinander verlinkt.
    Die große Neuerung hingegegen ist aber Upload von User Avataren. Ihr könnte nun JPG oder PNG Dateien hochladen und sie werden automatisch in 3 Größen resized und gespeichert. Einmal ein kleines (25x25), eins für das Forum (128x128) und das normale (200x200). Das Original Bild wird nach dem verarbeiten wieder vom Server gelöscht. Ich überlege noch, ob ich das Ganze dynamisch gestalten soll, also wie viele Kopien in welcher Größe gespeichert werden sollen. Aber das würde wenn dann ganz hinten anstehen. Formatsfremde Dateien werden nicht gespeichert und ihr bekommt eine Fehlermeldung.
    Ansonsten habe ich nur noch den Editor auf die benötigten Textareas beschränkt...

    Hier der Changelog:
    Neu
    User
    • Endlich sind sie da: die User Avatare zum hochladen
    Update
    Allgemein
    • WYSIWYG-Editor nur auf die Hauptinhalte beschränkt
    • Einige Buttons von Style angepasst
    Kommentare
    • Beim Erstellen eines Forums kann man nun Blog Kategorien zuweisen, um das Forum als Kommentarbereich zu nutzen
    Über Feedback würde ich mich sehr freuen! Auch Anregungen und Wünsche sind gern gesehen :)

    Glenvan
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest
  • Danke für das Freischalten :)
    So, nach meinem Urlaub habe ich auch endlich wieder ein wenig Zeit an der Seite weiterzubauen! Das erste was ich gemacht habe ist - darum funktionierte die URL nimmer - die Applikation über einen Webserver laufen zu lassen. Ich habe mich dabei für nginx (Engine X) entschieden, da es um einiges performanter sein soll als Apache2. Bisher habe ich damit keine Probleme, außer das ich mich mit dem Thema Caching noch auseinandersetzen muss. Es kann also sein, dass einige Inhalte nach mehrmaligen refresh zu sehen sind und das ist ja nicht Sinn der Sache. Desweiteren habe ich nun eine Kompression gewählt, welche den Traffic reduziert und so auch das Laden der Seite schneller machen sollte. Aber es kann sein, dass ich da noch ein wenig herum experimentiere, da es für mich auch noch #Neuland ist :)
    Jedenfalls läuft die Seite nun über den Port 80 und nicht mehr über den Port 5000!

    Aber auch abseits der Server Einstellung habe ich ein paar Features eingebaut bzw. ein bisschen was ausgebessert.
    Hier der Changelog von dieser Woche:
    Neu
    Blog
    • Upload von [lexicon]Thumbnails[/lexicon] nun möglich (Bei Video Posts wird das
    • hochgeladene verwendet, falls keins vorhanden weiterhin das von Youtube
    • Upload von [lexicon]Thumbnails[/lexicon] für Kategorien nun möglich
    • Neues Feld für Kategorien: Homepage (in Zukunft sollen
    • ausgewählte Kategorien auf der Homepage angezeigt werden, z.B. aktuelle
    • Projekte)
    • Entfernen sämtlicher [lexicon]Thumbnails[/lexicon] möglich
    • Ein Klick auf die Kategorie listet alle Posts derselben Kategorie auf
    Berechtigungen
    • Blog Posts editieren/löschen
    • Blog Kategorien editieren/löschen
    Update
    Startseite
    • Man gelangt nun direkt in den Blog Post nach einem Klick auf den Titel statt in die Gesamtübersicht
    User
    • Es wird nun ein 32px Thumbnail vom Avatar erstellt und auf der User Übersicht angezeigt
    Fix
    Blog
    • Bei der Folgennavigation sprang man beim Klick auf vorherige Folge immer auf die erste Folge
    Das war es für diese Woche erstmal. Ich bin immer noch dabei ein Admin-, Mod- und User-Panel einzubauen, aber weiß noch nicht genau wie das aussehen soll. Desweiteren sollen die Sidebars dynamisch werden. Die Datenbank hat schon entsprechende Einträge. Für nächste Woche ist aber erstmal das Forum Archiv geplant mit diversen Einstellmöglichkeiten.

    Wenn ihr Fragen, Wünsche und Kritik habt, dann lasst es mich bitte wissen! :)
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest
  • classicLPer schrieb:

    Ich habe mich dabei für nginx (Engine X) entschieden

    Mich würden die Gründe interessieren warum du gerade nginx gewählt hast, ich war ja früher großer Fan von Lighttpd (auch liebevoll Lighty genannt), hab aktuell aber wieder einen Apache auf meinem Server laufen weils unter Linux mit der Paketverwaltung einfacher ist da zusätzliche Dinge zu installieren und viele HowTos im Internet existieren (zB. um https einzurichten usw)...

    Zum Thema caching hab ich mich damals auch ganz gut informiert, zumindest für PHP gibts da ja einiges, aber mit Python hab ich bisher nur unter Linux zutun gehabt und nicht als Sprache für eine Web-Applikation...
    ——YouTube————————————————————————————————————————————
    — Endlos-Projekte: Minecraft (SinglePlayer), Craft The World, Banished, Besiege, Sims4
    — ..Abgeschlossen: Leisure Suit Larry 6+7, Dishonored, Surface 2+3, Mirrors Edge, uvm
    — . Kurz- Projekte: The Tower, Fighting Is Magic, Euro Truck Simulator 2, uvm
    — ......Retro-Ecke: Day Of The Tentacle, Flight Of The Amazon Queen, NFS: HP2, uvm
    ————————————————————————————————————————————TbMzockt.de—
  • Zuerst mal habe ich generell nach Alternativen zum Apache2 gesucht, da ich nur einen kleinen vServer habe und nicht allzuviele Ressourcen verbraten möchte. Lighttpd scheint mit dem Release von nginx auch abgenommen zu haben, aber das kann ich nicht beurteilen. Mein Webserver muss erstmal nichts anderes können, als die Python Applikationen zu mappen. Da nginx für high traffic Seiten, aber auch - das ist das Wichtigste für mich - für leistungsschwache Hardware laut meinen Recherchen die bessere Wahl sei, habe ich es einfach ausprobiert. Es gibt dort ebenfalls Module, wenn aber wahrscheinlich nicht so viele wie für den Platzhirsch Apache.
    Den Rest muss halt die Erfahrung und die Zeit zeigen. Ich muss aber zugeben, dass ich einige Zeit gebraucht habe, um meine Applikation über nginx zum laufen zu bekommen. Aber wenn man erstmal dahinter gestiegen ist, machen diverse Sachen auch mehr Sinn. :)

    Ach so, wegen der Paketverwaltung: Ich nutze ja Debian 7 und die haben nginx auch nginx Pakete, welche aber hoffnungslos veraltet sind. Deswegen sollte man noch eine Source hinzufügen, um immer die neuste Version zu erhalten. Bei Interesse kann ich sie dir gern nennen.
    Aktuelle Projekte:
    Minecraft, Painkiller, Rift, Titan Quest