2016-07-25 37 views
3

有沒有任何方式訪問當前用戶對象或至少沒有訪問請求的ID?模型中說呢?金字塔得到當前用戶/用戶ID無需訪問請求

我使用金字塔和SQLAlchemy。

首先我想到了Singleton,但我認爲這可能會在有更多的用戶時返回錯誤的對象。

class UserSingleton(object): 
    user = None 

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

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

我需要這與我的模型中使用,但我不能在這裏傳遞的要求,因爲這是由ORM事件稱爲:

@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

我不認爲數據庫事件中存在當前用戶,因爲它們發生在請求的上下文之外。 –

+0

在您的函數中明確傳遞'request'或'user'的最佳實踐,而不是依賴於線程本地。 –

回答

3

好了,找到了解決方法做:

from pyramid.threadlocal import get_current_request 
request = get_current_request()