Wie sieht ein Datenmodell für ein Forum aus?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Y0Gi hat geschrieben:Die jetzige, portierte Version basiert auf Werkzeug 0.2, SQLAlchemy, Genshi und Babel.
Denkt ihr das django dafür weniger geeignet ist?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Y0Gi, wenn ihr ein Forum baut, wie löst ihr denn das Problem, gelesene bzw. ungelesene Beiträge pro Anwender zu verwalten?

Im Pocoo-Source gibt es übrigens neben den von mir bereits postulierten Tabellen noch

Code: Alles auswählen

class ReadForums(models.Model):
    user = models.ForeignKey(User)
    forum = models.ForeignKey(Forum)
    date = models.DateTimeField()
    
class ReadThreads(models.Model):
    user = models.ForeignKey(User)
    post = models.ForeignKey(Post)
    date = models.DateTimeField()
wobei mir nicht ganz klar ist, warum man beides braucht. Es sieht aber so aus, als wenn Pocoo nur "alle Beträge seit XY sind gelesen" speichern kann. Jedenfalls wird da ggf. `datetime.utcnow()` in einer Funktion `mark_forum_as_read` reingeschrieben.

Dieses Forum hier macht es besser - allerdings nur so lange, wie man sich nicht versucht, ein zweites Mal anzumelden während man angemeldet ist. Dabei werden offenbar alle Markierungen gelöscht - sehr lästig.

Stefan
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

sma hat geschrieben:Y0Gi, wenn ihr ein Forum baut, wie löst ihr denn das Problem, gelesene bzw. ungelesene Beiträge pro Anwender zu verwalten?
Ich hab das damals bei meinem PHP Forum recht einfach gemacht. Wenn sich ein User eingeloggt hat habe ich einfach alle Beiträge zwischen der letzten Aktivität und dem aktuellen Login in einer Tabelle eingetragen
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

burli hat geschrieben:Ich hab das damals bei meinem PHP Forum recht einfach gemacht. Wenn sich ein User eingeloggt hat habe ich einfach alle Beiträge zwischen der letzten Aktivität und dem aktuellen Login in einer Tabelle eingetragen
Ah super. Der erste, die mal auf die Frage eingeht :)

Dieses Forum macht's wohl genauso, denn das würde erklären, warum nochmaliges Anmelden die Liste der ungelesenen Beiträge tilgt.

Stefan
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

sma hat geschrieben: Dieses Forum macht's wohl genauso, denn das würde erklären, warum nochmaliges Anmelden die Liste der ungelesenen Beiträge tilgt.
Das hat so nix zu sagen. Das kann man ja programmieren wie man will. Ich habe einfach alle Einträge in der "ungelesen" Tabelle, die älter als 1 Tag waren, bei der nächsten Anmeldung gelöscht. Man kann bei einer neuen Anmeldung des Users auch seine kompletten Einträge löschen, wie man will.

Wenn man noch ein Feld für das Unterforum einfügt kann man zb auch, wie hier, selektiv für jedes Unterforum einen Link "Forum als gelesen markieren" einfügen
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:
Y0Gi hat geschrieben:Die jetzige, portierte Version basiert auf Werkzeug 0.2, SQLAlchemy, Genshi und Babel.
Denkt ihr das django dafür weniger geeignet ist?
Das Toolset was wir haben hat durchaus einige Vorteile: zu Werkzeug haben wir wesentlich besseren Upstream-Kontakt, SQLAlchemy schlägt von den Features das Django-ORM recht leicht (welches bei komplizierteren Sachen sich teilweise ziemlich dumm verhält und man einige Dinge selbst simulieren muss, was es in SQLAlchemy frei Haus gibt), Genshi bietet XML-Templates (das System hat schon seit langem auf XML-Templates gesetzt, da wäre der Wechsel zu Djangos Templates ein ausreichend großer Aufwand, dass man gleich hätte auf Jinja umsteigen können) und Babel ist die für Genshi passende i18n-Lösung.

Außerdem sind wir wohl Eigenbrötler. Klar, mit Django könnte man das alles auch, aber Teil des Spaßes ist es auch neue Techniken auszuprobieren und einzusetzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Für jeden User möchte ich nun festhalten, welche Beiträge er gesehen hat bzw. welche noch neu für ihn sind. Wie mache ich dies und insbesondere, wie mache ich dies einigermaßen speichereffizient?
Ich würde das über einen Vergleich des Last Login oder der letzen Aktion des Users mit dem Erstellungsdatum des Posts machen. Beiträge die danach erstellt wurden, kann er ja nicht gelesen haben. Ansonsten müsstest du ja für jeden Beitrag und jeden User einen Datensatz schreiben, was auf Dauer bei einem wachsenden Forum etws unhandlich werden dürfte.

Gruß Uwe
---------------------------------
have a lot of fun!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

sma hat geschrieben:Für jeden User möchte ich nun festhalten, welche Beiträge er gesehen hat bzw. welche noch neu für ihn sind.
Das macht IMHO nur Sinn, wenn der User wirklich immer alle Beiträge lesen will oder das Forum sehr "klein" ist. Ansonsten wird die Liste schnell viel zu unübersichtlich.

IMHO reicht eine Funktion wie "Alle Beiträge der letzten X-Std" oder "Zeige die letzten X Beiträge"

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Nein, Sinn mach das schon. Wenn ich hier im Forum nur die Funktion "last24h" hätte wäre mir das zu wenig. Ich möchte schon wissen wo etwas neues geschrieben wurde ohne mir die Uhrzeit merken zu müssen. Ich muss ja nicht alles lesen, nur das was mich interessiert. Den Rest markiere ich dann einfach als gelesen, das ist dann ja auch aus der Tabelle gelöscht
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich verwalte mit meinem Google-Reader ca. 90 RSS-Feeds von Blogs um über alles mögliche auf dem Laufenden zu bleiben. Etwas als gelesen oder ungelesen zu markieren oder (mittels * oder tag) auf Wiedervorlage zu setzen ist für mich essentiell, um den Überblick zu behalten. Zum Teil lagern die Artikel Tage oder Wochen, bis ich dazu komme, sie zu lesen oder wenigstens zu überfliegen. Einfach nur die letzten 24h wäre kein Feature für mich.

PS: Warum hat dieses Forum eigentlich keinen RSS-Feed der letzten 24h. Wäre praktisch, denn dann könnte ich auch hier meinem Reader benutzen.

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

sma hat geschrieben:PS: Warum hat dieses Forum eigentlich keinen RSS-Feed der letzten 24h. Wäre praktisch, denn dann könnte ich auch hier meinem Reader benutzen.
Weil phpBB 2.0.x das nicht unterstützt. Sorry.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

jens hat geschrieben:
Y0Gi hat geschrieben:Die jetzige, portierte Version basiert auf Werkzeug 0.2, SQLAlchemy, Genshi und Babel.
Denkt ihr das django dafür weniger geeignet ist?
Ich schon, ja. Django ist zu starr und unflexibel, austauschbare Komponenten sind da besser.
sma hat geschrieben:Y0Gi, wenn ihr ein Forum baut, wie löst ihr denn das Problem, gelesene bzw. ungelesene Beiträge pro Anwender zu verwalten?
Es gibt Tabellen, die User- und Thread-/Kategorie-ID sowie den Zeitpunkt der letzten Betrachtung speichern.
Antworten