2016-07-25 15 views
3

Gibt es eine Möglichkeit, auf aktuelle Benutzerobjekt oder mindestens ID ohne Zugriff auf Anfrage zugreifen? Sagen wir im Modell?Pyramid erhält aktuellen Benutzer/Benutzer-ID ohne Zugriff auf Anfrage

Ich benutze Pyramide und SQLAlchemy.

Zuerst habe ich über Singleton nachgedacht, aber ich denke, dass das falsche Objekt zurückgeben kann, wenn es mehr Benutzer gibt.

class UserSingleton(object): 
    user = None 

    def __new__(cls, user=None): 
     UserSingleton.user = user 
     return UserSingleton.user 

    @classmethod 
    def get(cls): 
     return cls.user 

Ich muss das mit meinem Modell verwenden, aber ich kann nicht Anfrage hier passieren, weil diese von ORM-Ereignis aufgerufen wird:

@classmethod 
def log(cls, description, log_type=None, name=None): 
    user = ?? 
    audit_log = cls(
     user_id=user.id if user else None, 
     description=description, 
     type=log_type, 
     name=name 
    ) 

    DBSession.add(audit_log) 

    return audit_log 
+0

Ich glaube nicht, dass ein aktueller Benutzer in einem Datenbankereignis ist, da sie außerhalb des Kontexts der Anfrage auftreten. –

+0

Die beste Vorgehensweise, um "request" oder "user" explizit in Ihren Funktionen zu übergeben, anstatt sich auf Thread-Locals zu verlassen. –

Antwort

3

Ok, eine Lösung gefunden, indem Sie:

from pyramid.threadlocal import get_current_request 
request = get_current_request() 
Verwandte Themen