md5 aus model instanz generieren

Django, Flask, Bottle, WSGI, CGI…
Antworten
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

Moin.

Ich habe Lösungsidee, weiss jedoch nicht ob ich das Problem nicht von einer ganz falschen Seite angehe... ich glaubs beinahe ;)

Ich habe ein Model das aus einem ImageField und mehreren CharFields besteht.
Nun würde ich gerne bevor ich die Daten vom Server anfordere am Client prüfen ob sich das Model bzw ein Eintrag in der Datenbank oder das zugehörige Bild seit dem letzten Abruf verändert hat.

nun dachte ich in meiner Naivität, man könne bei der Anfrage einfach einen md5 hash über die gesamte Modelinstanz+Bild errechnen lassen und diese an den Client schicken. Dieser vergleicht die hash mit der in seiner Datenbank und fragt nun, falls die hashs nicht identisch sind, die Daten erneut ab und speichert die neue hash anstelle der alten.

Als aller erstes musste ich einsehen dass es so einfach nicht ist, da Django ja stets seine __self__ Funktion vorhält und die md5 hash
dann aus dem string den der von __self__ bereitgestelt wird errechnet.

Bei weiterem nachdenken sind mir mehr und mehr Zweifel an meinem Vorhaben gekommen. Das Problem besteht aber noch immer.
Wie würdet ihr sowas realisieren?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

(Du meinst wohl die `__repr__`-Methode. `__self__` gibt es nicht.)

Lässt sich das vielleicht mit einem Timestamp lösen? D.h. das Model hat nen Änderungstimestamp (konkret: mit `auto_now=True`) und du der Client teilt dem Server bei der Anfrage mit, welchen Stand des Objektes er hat.

Um dem Client mitzuteilen, dass er bereits die aktuellste Version hat, könntest du dann einfach mit entsprechendem HTTP-Statuscode (304 Not Modified) und leerem Body antworten.

Wozu dient das Ganze generell eigentlich? Bandbreite/Runterladezeit sparen? Oder hast du eigentlich gar kein Problem für die Lösung? ;-)
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

jo es geht darum traffic zu sparen :)
das ganze ist für eine android app die daten aus einem django project anzeigen soll.
ein timestamp ist vermutlich tatsächlich eine schlauere idee ":)
Antworten