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
Ich glaube nicht, dass ein aktueller Benutzer in einem Datenbankereignis ist, da sie außerhalb des Kontexts der Anfrage auftreten. –
Die beste Vorgehensweise, um "request" oder "user" explizit in Ihren Funktionen zu übergeben, anstatt sich auf Thread-Locals zu verlassen. –