W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
0.10 新版功能.
在應(yīng)用上下文或 flask.g 對象上存儲用戶認(rèn)證信息和數(shù)據(jù)庫連接 非常常見。一般的模式是在第一次使用對象時,把對象放在應(yīng)用上下文或 flask.g 上面,而在請求銷毀時移除對象。試想一下例如下面的獲 取當(dāng)前用戶的代碼:
def get_user():
user = getattr(g, 'user', None)
if user is None:
user = fetch_current_user_from_database()
g.user = user
return user
對于測試,這樣易于從外部覆蓋這個用戶,而不用修改代碼。連接 flask.appcontext_pushed 信號可以很容易地完成這個任務(wù):
from contextlib import contextmanager
from flask import appcontext_pushed
@contextmanager
def user_set(app, user):
def handler(sender, **kwargs):
g.user = user
with appcontext_pushed.connected_to(handler, app):
yield
并且之后使用它:
from flask import json, jsonify
@app.route('/users/me')
def users_me():
return jsonify(username=g.user.username)
with user_set(app, my_user):
with app.test_client() as c:
resp = c.get('/users/me')
data = json.loads(resp.data)
self.assert_equal(data['username'], my_user.username)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: