2016-07-25 5 views
3

リクエストにアクセスすることなく現在のユーザーオブジェクトまたは少なくともIDにアクセスする手段はありますか?モデルで言う?ピラミッドはリクエストにアクセスできない現在のユーザー/ユーザーIDを取得します

私はピラミッドとSQLAlchemyを使用します。

最初に私はシングルトンについて考えましたが、これはユーザーが多いときに間違ったオブジェクトを返す可能性があると思います。

@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

は、[OK]を、実行して解決策を見つけた:これはORMイベントによって呼び出されるため、

class UserSingleton(object): 
    user = None 

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

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

は、私は私のモデルで使用するためにこれを必要とするが、私はここに要求を渡すことはできません

from pyramid.threadlocal import get_current_request 
request = get_current_request() 
関連する問題