我想弄清楚一種方法來存儲每個用戶在網站上的建議,這樣當用戶登錄時,建議可以被收集一次而不需要被更新,直到用戶對新東西進行評級。在燒瓶登錄當前用戶設置屬性以供以後訪問
我認爲一個很好的方法來做到這一點將存儲在User類的建議,但似乎當我嘗試訪問此屬性後,值不再存在。爲了解決這個問題,我發現從視圖中查看current_user
地址的變化。
示例用戶類:
class User(UserMixin):
def __init__(self, user_doc):
self.username = user_doc['Username']
self.userid = user_doc['User Id']
self.recommendations = []
def get_recs(self):
self.recommendations = app.config['MODEL'].predict_all(self.userid)
例views.py:
@APP.route('/', methods=['GET'])
def index():
"""Render the homepage."""
if current_user.is_authenticated:
if current_user.recommendations == []:
current_user.get_recs()
return render_template('index.html')
@APP.route('/recommend', methods=['POST', 'GET'])
@login_required
def recommend():
recs = get_recommendations(current_user)
return render_template('recommend.html', recs=recs[:10])
如果我登錄,並經過網頁,如預期current_user.recommendations
得到填補。但是,如果我然後導航到/recommend
並在recs = get_recommendations(current_user)
之前放置斷點,我發現current_user.recommendations
又是一個空列表。這是current_user
的預期行爲,如果是這樣,存儲用戶屬性以防止重複計算的正確方法是什麼?
在此先感謝您的幫助。
編輯
顯然我沒有解釋我的問題不夠徹底,它似乎類似於How to user g user global in flask。但是,我讀到了這個問題,事實上並沒有任何相似之處。
問題:
我的模型是適度複雜,需要> 0.1秒預測所有的建議的用戶。在我看來,構建網站的方式是每次用戶導航到/recommend
時,必須計算建議是浪費的,並且可以提供足夠的請求,從而減慢服務器的速度。
解決辦法:
爲了規避這個問題,我認爲,在計算時登錄一次,後續新的評級被加入後的建議將降低預測的服務器將需要計算體積,從而提高服務器的性能以及爲每個用戶加載推薦頁面所需的時間。
但是,我似乎無法在一個視圖中的現有current_user
對象中設置屬性,然後在另一個視圖中可用。
問題:
有沒有辦法在視圖內設置了current_user
對象的屬性值,使得它們對其他視圖訪問?
這是如何解決這個問題的?與這種方法一樣,我不得不更新'推薦'函數來訪問'current_user.get_recs',這將最終重新計算這些建議。我的整個希望是在登錄時計算一次,並存儲一組可以在任何視圖之後訪問的值。 – Grr