【问题标题】:Adding request.authenticated_userid to SQLAlchemy objects in Pyramid将 request.authenticated_userid 添加到 Pyramid 中的 SQLAlchemy 对象
【发布时间】:2015-07-21 19:45:35
【问题描述】:
【问题讨论】:
标签:
python
sqlalchemy
pyramid
【解决方案1】:
我想出了解决办法:
history_meta.py 包含为before_flush SQLAlchemy 事件注册的create_version 函数(由versioned_session 在mixin 中定义)。
在create_version 中必须获得当前交易:
current = transaction.get()
用户在current.user 中可用。
【解决方案2】:
我不是 SQLAlchemy 专家,但我确实将 Pylons Pyramid 与 SLQAlchemy 一起使用,这就是我从我的事件中访问用户 ID 的方式(以下只是为了展示这个想法):
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
from pyramid.threadlocal import get_current_request
DBSession = scoped_session(
sessionmaker(extension=ZopeTransactionExtension()),
scopefunc=get_current_request)
Base = declarative_base()
# Define your tables
@event.listens_for(Base, "after_insert", propagate=True)
def user_after_insert(mapper, connection, target):
try:
user_id = DBSession.registry.scopefunc().userid
except AttributeError:
# most likely initializedb script is being called