2017-09-20 1 views
-3

Ich setze eine Variable in meiner init-Methode als eine leere Liste. Dann frage ich in meiner get-Methode die Datenbank ab und setze die Liste. Als nächstes versuche ich in meiner Post-Methode die Variable zu verwenden. Aber aus irgendeinem Grund wird die Variable auf eine leere Liste zurückgesetzt, wenn meine Post-Methode ausgeführt wird (was vollständig erwartet werden kann?). Könnten Sie mir helfen, herauszufinden, was ich falsch mache, oder lassen Sie mich wissen, ob es einen alternativen Weg gibt, dies zu tun?Variable in init definieren, Variable in get-Methode setzen und in post-Methode verwenden

Danke!

class thisHandler(BaseHandler): 
    def __init__(self, *args, **kwargs): 
     super(thisHandler, self).__init__(*args, **kwargs) 
     self.topList= [] 

    def get(self, id): 
     if self.user: 
      #Other stuff happens 
      self.topList = get_myList(id) #This is definitely returning a populated list as it displays just fine on my page 
      #Other stuff happens 
      self.render('page.html', variables) 

    def post(self, id): 
     #Other stuff happens 
     system.debug(self.topList) #this comes back empty. this is the first reference to it in the post method 
     #Other stuff happens 

Antwort

0

Die Methoden werden nicht im selben Thread der Ausführung aufgerufen. Ihre Instanzdaten sind Thread-lokal. Wenn Sie möchten, dass Daten von einem Remoteanruf zum nächsten persistieren, müssen Sie Sitzungsdaten auf der Serverseite speichern, indem Sie einen Cookie verwenden, um die Clientsitzung von einem Anruf zum nächsten zu identifizieren.

0

Wenn Sie die Methoden get oder set verwenden, bleiben Sie immer bei ihrer Bedeutung. Setzen/aktualisieren Sie niemals eine Variable in der get-Methode und geben Sie niemals einen Wert aus der set-Methode zurück. Ich habe viele Leute dabei gesehen.

Richtigen Weg:

GET method - should always return what you want 
SET method - should always set the values and never return anything 

Mit diesem wird gesagt, Sie brauchen self.get() die Methode aufzurufen, bevor Sie zum post() Verfahren gehen. Dies hilft beim Aktualisieren des Werts.