您可以註冊一個金字塔的事件處理程序將其上設置任何新的請求參數:
from pyramid import events
def on_new_request(event):
"""
you can access request as event.request
and the current registry settings as event.request.registry.settings
"""
session = DBSession()
session.execute("SET blah TO 'foo'")
def app(global_config, **settings):
config = Configurator(...)
config.add_subscriber(on_new_request, events.NewRequest)
詳情請參閱Deployment Settings和events.NewRequest。
需要注意的一件事是確保始終使用相同的會話對象 - SQLAlchemy維護一個連接池,如果提交了會話,所有後續操作將使用不是全新的會話預先配置您的設置。換句話說,您不應該在代碼中執行session.commit(),session.rollback(),transaction.commit()等,而是依賴於ZopeTransactionExtension在請求/響應週期結束時提交/回滾事務。無論如何,這是一個推薦的做法。
這正是我所需要的。謝謝。我正在使用ZopeTransactionExtension。沒有提交(),在某些情況下,只有我調用session.flush()。 – 2014-10-08 07:20:26
是的,謝爾蓋是正確的,這種模式將工作得很好。我更願意親自使用訂戶語法:'@subscriber(NewResponse)'http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#subscriber-predicates – Jason 2014-10-08 12:45:52
您可以將答案標記爲然後接受 – Sergey 2014-10-08 19:10:20