2012-04-06 4 views
0

Ich benutze Appengine, webapp2 framework. Ich habe folgendes Modell:sende ordentliche JSON-Daten eines Datenbankmodells vom Server (Python) zum Client

class Match(db.Model): 
    date_time = db.DateTimeProperty() 
    team1 = db.StringProperty() 
    team2 = db.StringProperty() 
    venue = db.StringProperty() 
    result = db.IntegerProperty() 

nun auf der Client-Seite, ein Ereignis, eine Post-Anforderung zu einem meiner views macht, auf der Grundlage dieser Post-Anforderung, ich mag json Daten senden, die von jQuery leicht lesbar/Javascript.

Was wäre der beste Weg, dies zu tun?

+0

Fragen Sie, wie man die Anfrage auch tut? –

+0

Nein, ich wollte nur wissen, wie man die Daten eines Modells in einer View verarbeitet und json-Objekte zurückgibt, die auf der Clientseite gelesen werden können. – user993563

+0

Ok. Was die Verarbeitung auf der Client-Seite betrifft, denke ich, wenn Sie eine JSON-Zeichenkette als Typ "application/json" zurückgeben, wird es bereits ein JSON-Objekt in Javascript sein. –

Antwort

3

in den Modellen:

class DictModel(db.Model): 
    def to_dict(self): 
     return dict([(p, unicode(getattr(self, p))) for p in self.properties()]) 


class Match(DictModel): 
    date_time = db.DateTimeProperty() 
    team1 = db.StringProperty() 
    team2 = db.StringProperty() 
    venue = db.StringProperty() 
    result = db.IntegerProperty() 

und in den Ansichten:

import json 
self.response.out.write(json.dumps([m.to_dict() for m in matches])) 
+0

Wenn er webapp2 benutzt, benutzt er wahrscheinlich python27 auf AppEngine, was bedeutet, dass er die bessere json Bibliothek benutzen kann als die simplejson. importiere stattdessen json. – Albert

+0

Schön. Ich hatte einige Probleme und das hat perfekt funktioniert. Ich habe die Methode to_dict() sowie eine Methode to_json() zu meiner Basismodellklasse hinzugefügt. Das hat mein Leben sehr erleichtert. –

0

Vor allem empfehle ich woul guido`s mit NDB anstelle des alten db-Modul. Aber tatsächlich haben sowohl das alte db-Modul als auch ndb eine Lösung für Sie. Zuerst müssen Sie Ihr Modell von einem Objekt in eine serialisierbare json-Struktur konvertieren. Speziell ein Python-Wörterbuch.

Old db

dict = db.to_dict (Matchentity)

ndb

dict = Matchentity.to_dict()

Nun müssen Sie diese in Json serialisiert werden, und dies ist nicht so trivial wie Sie vielleicht denken, da es einige Eigenschaften gibt, mit denen Sie umgehen müssen, da ihre Werte in json nicht viel Sinn ergeben. In new ndb können Sie diese einfach ausschließen, indem Sie in der Methode to_dict() den Parameter exlude verwenden. In der alten db könnte es eine bessere Idee sein, eine spezifische Methode für jedes Modell zu schreiben. Dann benutze json.dump (dict). Es gibt einige gute Diskussionen darüber auf der ndb Mailingliste.

Verwandte Themen