Erhalte den aktuellen Benutzer Async in Tornado

9

Wenn ich get_current_user () verwende, muss ich einige Dinge in Redis ( tornado-redisis ) asynchron überprüfen.

Ich mache folgendes:

%Vor%

Ich möchte zum Beispiel authenticated_async Decorator:

verwenden %Vor%

Aber ich habe nur in der Konsole 123 .

Was ist los? Wie behebe ich das?

Danke!

AKTUALISIEREN

Ich habe den Code mit yield result aktualisiert.

In auth_cookie habe ich cfae7a25-2b8b-46a6-b5c4-0083a114c40e .

Dann gehe ich zum Terminal:

%Vor%

Also,

%Vor%

Muss zurückgegeben werden

%Vor%

Aber es gibt eine 123

zurück

UPDATE 1

Mit

%Vor%

In der Konsole habe ich:

%Vor%     
tim 14.06.2015, 19:35
quelle

3 Antworten

4

get_secure_cookie() gibt eine Byte-Zeichenfolge zurück; Da das Cookie mit einem b' Präfix ausgedruckt wird, müssen Sie auf Python 3 sein. In Python 3 scheint tornado-redis Unicode-Strings statt Byte-Strings zu erwarten; Jede Eingabe, die keine Unicode-Zeichenfolge ist, wird in eine mit der Funktion str() konvertiert. Dadurch wird das oben angegebene b' Präfix hinzugefügt, sodass Sie nach b'cfae7a25-2b8b-46a6-b5c4-0083a114c40e' und nicht nach cfae7a25-2b8b-46a6-b5c4-0083a114c40e

suchen

Die Lösung besteht darin, das Cookie in ein str zu konvertieren, bevor es an redis: auth_cookie = tornado.escape.native_str(auth_cookie)

gesendet wird     
Ben Darnell 18.06.2015, 14:27
quelle
0

Schauen Sie sich die Doc-Zeichenkette von gen.Task an:

  

Nimmt eine Funktion (und optionale zusätzliche Argumente) und führt sie mit       diese Argumente plus ein callback Schlüsselwort-Argument.

Akzeptiert c.hget ein Callback-Argument? Ist dies nicht der Fall, löst der Callback eine Ausnahme aus, in der Zukunft wird kein Ergebnis festgelegt, daher druckt die print-Anweisung die Benutzer-ID nicht.

    
NeoWang 17.06.2015 07:54
quelle
0

Die Antwort ist zurück in Ihrer Wrapper-Coroutine.

%Vor%

Sie wollen kein Ergebnis liefern, sondern es von der Coroutine "zurückgeben". Da Python jedoch nicht die Verwendung einer nicht leeren Rückgabe von einem Generator zulässt, müssen Sie sie als umbrochene Ausnahme auslösen, die Tornado auspacken kann, und das Ergebnis an den Aufrufer übergeben ( get_current_user ) )

%Vor%

Nachdem Sie das getan haben, sollten Sie feststellen, dass es funktioniert.

    
Danver Braganza 22.06.2015 18:53
quelle

Tags und Links