????????在Flask中,current_app、g、request、session是非常關鍵的內置對象,它們分別承擔著不同的作用,并廣泛應用于Web開發中的多個環節。
(1)current_app
????????它是一個代表當前Flask應用實例的代理對象,允許開發者在不同的模塊和函數中訪問應用實例的配置和擴展等。current_app主要用于訪問應用配置和在應用上下文之外的地方使用應用級別的資源。例如,可以在應用的配置中使用current_app.config['KEY']
來獲取或設置配置值。
from flask import Flask, current_appapp = Flask(__name__)@app.route('/')
def index():config_value = current_app.config['KEY']return f"Config value: {config_value}"if __name__ == '__main__':app.run()
(2)g
? ? ? ? g全稱就是global,這是一個特定于應用上下文的全局變量,常用于在同一請求處理過程中的不同函數間傳遞數據。g對象的生命周期與請求處理期間的生命周期相同,因此它通常被用來在視圖函數之間臨時存儲數據,比如數據庫連接或用戶信息。
from flask import Flask, gapp = Flask(__name__)@app.before_request
def before_request():g.user = 'John Doe' # 在每個請求開始時設置g.user@app.route('/')
def index():user = g.userreturn f"User : {user }" # 在視圖函數中使用g.userif __name__ == '__main__':app.run()
(3)request
????????代表了客戶端發出的HTTP請求,包含了請求的所有相關數據,如方法、路徑、參數、數據和頭信息等。通過request對象,可以獲取諸如請求參數(例如 request.args
)、表單數據(例如 request.form
)以及查詢字符串(例如 request.query_string
)等信息。由于其封裝了請求的全部信息,因此是處理Web請求不可或缺的部分
from flask import Flask, requestapp = Flask(__name__)@app.route('/')
def index():method = request.methodargs = request.argsreturn f"Method: {method}, Args: {args}"if __name__ == '__main__':app.run()
(4)session
????????該對象用于管理用戶的會話信息,通常用來存儲需要在不同請求間保持的信息,例如用戶登錄狀態。默認情況下,session數據存儲在客戶端的Cookie中,但也可以配置成其他存儲方式。通過session對象的方法,例如session['key'] = value
來存儲數據,使用value = session['key']
來讀取數據,這樣可以實現用戶狀態的跟蹤和管理。
from flask import Flask, sessionapp = Flask(__name__)
app.secret_key = 'your_secret_key'@app.route('/set_session')
def set_session():session['username'] = 'John'return "Session set."@app.route('/get_session')
def get_session():username = session.get('username', 'Not set')return f"Username: {username}"if __name__ == '__main__':app.run()