[英]Tornado - Python global variable
我正在嘗試將 Tornado 與 SqlAlchemy 一起使用,我需要在插入或更新操作中將當前用戶從 RequestHandler(龍卷風)傳遞給模型(SqlAlchemy)。 但我不想將值直接傳遞給模型,例如:
#### RequestHandler POST method...
user = Session.query(User).get(1)
user.name = "bla, bla, bla..."
user.updated_by = self.current_user # don't use...
session.commit()
我在 __init__.py 文件中使用全局變量,並在 RequestHandler 中設置當前用戶值,然后在使用 SqlAlchemy 的更新事件之前獲取值。
這個想法是要知道什么用戶是創建者和更新者。 為什么我不想像之前的示例那樣直接將當前用戶傳遞給模型?,因為這將是其他開發人員的工具,我正在努力讓他們感到舒適,而且,他們可以忘記它,它是重要的。
這是一個好主意,還是有其他更好的方法?
如果您一次處理多個請求,您的解決方案就會出現問題。 Tornado 是一個異步 Web 框架,因此另一個請求可能會覆蓋您的全局變量並將用戶設置為其他人。 將請求存儲在self
上的數據是一個很好的做法,tornado 將確保數據被其他同時請求更改。
一個可能對您有用的解決方案是將您的工具添加到基本處理程序中或創建一個裝飾器。 建議更多細節很棘手,如果您想獲得更好的選擇,請在您的問題中包含更多信息。
當前用戶在每個處理程序(和模板)中都可用。 如何確定、驗證和設置當前用戶取決於您。
基本上只是子類tornado.web.RequestHandler
並覆蓋新/自己的 BaseHandler 中的get_current_user
方法。
這是來自龍卷風文檔的引述:
用戶身份驗證 當前經過身份驗證的用戶在每個請求處理程序中作為 self.current_user 可用,在每個模板中作為 current_user 可用。 默認情況下,current_user 為無。
要在您的應用程序中實現用戶身份驗證,您需要覆蓋請求處理程序中的 get_current_user() 方法,以根據例如 cookie 的值來確定當前用戶。 這是一個示例,用戶只需指定昵稱即可登錄應用程序,然后將昵稱保存在 cookie 中。
您可以在官方 tornado 博客演示中看到一個完整的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.