Wie eine Controller-Methode in Turbogears erstellen, die von innerhalb der Steuerung aufgerufen werden können, oder mit einer Vorlage gemacht

StackOverflow https://stackoverflow.com/questions/454223

  •  19-08-2019
  •  | 
  •  

Frage

Wenn Sie eine Controller-Methode haben etwa so:

@expose("json")
def artists(self, action="view",artist_id=None):
    artists=session.query(model.Artist).all()
    return dict(artists=artists)

Wie können Sie diese Methode aus dem Controller-Klasse aufrufen, und die Python dict zurück - anstatt die json-codierte Zeichenfolge des dict (die Sie es von json zurück in eine Python dict zu entschlüsseln erfordert). Ist es wirklich notwendig, eine Funktion zu schreiben, die Daten aus Ihrem Modell zu erhalten, und eine andere von den Vorlagen (KID, JSON), dass die Daten für die Verwendung zu packen? Warum ist es, dass, wenn Sie diese Methode aufrufen, aus der gleichen Klasse, z.

artists = self.artists()

Sie erhalten einen JSON-String, wenn das nur angemessen ist, wenn das Verfahren als Teil einer HTML-Anforderung aufgerufen wird. Was habe ich verpasst?

War es hilfreich?

Lösung

Ich gehe dies in der Regel durch ein ‚Arbeitnehmer‘ Verfahren mit, die die Datenbank abfragt, transformieren Ergebnisse usw., und ein separaten Belichtungsverfahren, mit allen erforderlichen Dekorateure. Z.

# The _artists method can be used from any other method
def _artists(self, action, artist_id):
    artists = session.query(model.Artist).all()
    return dict(artists=artists)

@expose("json")
#@identity.require(identity.non_anonymous())
# error handlers, etc.
def artists(self, action="view", artist_id=None):
    return self._artists(action=action, artist_id=artist_id)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top