日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flask】flask上下文

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flask】flask上下文 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上下文:即語境,語意,在程序中可以理解為在代碼執(zhí)行到某一時刻時,根據(jù)之前代碼所做的操作以及下文即將要執(zhí)行的邏輯,可以決定在當前時刻下可以使用到的變量,或者可以完成的事情。

Flask中有兩種上下文,請求上下文和應(yīng)用上下文
Flask中上下文對象:相當于一個容器,保存了 Flask 程序運行過程中的一些信息。

一、請求上下文

思考:在視圖函數(shù)中,如何取到當前請求的相關(guān)數(shù)據(jù)?比如:請求地址,請求方式,cookie等等
在 flask 中,可以直接在視圖函數(shù)中使用 request 這個對象進行獲取相關(guān)數(shù)據(jù),而 request 就是請求上下文的對象,保存了當前本次請求的相關(guān)數(shù)據(jù),請求上下文對象有:request、session

  • request
    封裝了HTTP請求的內(nèi)容,針對的是http請求。舉例:user = request.args.get(‘user’),獲取的是get請求的參數(shù)。
  • session
    用來記錄請求會話中的信息,針對的是用戶信息。舉例:session[‘name’] = user.id,可以記錄用戶信息。還可以通過session.get(‘name’)獲取用戶信息。

二、應(yīng)用上下文

它的字面意思是 應(yīng)用上下文,但它不是一直存在的,它只是request context 中的一個對 app 的代理(人),所謂local proxy。它的作用主要是幫助 request 獲取當前的應(yīng)用,它是伴 request 而生,隨 request 而滅的

應(yīng)用上下文對象有:current_app,g

current_app

應(yīng)用程序上下文,用于存儲應(yīng)用程序中的變量,可以通過current_app.name打印當前app的名稱,也可以在current_app中存儲一些變量,例如:

  • 應(yīng)用的啟動腳本是哪個文件,啟動時指定了哪些參數(shù)
  • 加載了哪些配置文件,導入了哪些配置
  • 連了哪個數(shù)據(jù)庫
  • 有哪些public的工具類、常量
  • 應(yīng)用跑在哪個機器上,IP多少,內(nèi)存多大

代碼塊:

在app.py文件設(shè)置一個任意參數(shù),去藍圖中去拿這個定義的參數(shù)

from flask import Flask from item藍圖 import item_bp app = Flask(__name__)app.zilv='hello zilv' #往app中設(shè)置任意的一個參數(shù)app.register_blueprint(item_bp,url_prefix='/item')@app.route('/') def hello_world():return 'hello world'if __name__ == '__main__':app.run(debug=True)

代碼塊

在藍圖文件中,通過current_app.參數(shù)名,去獲得這個參數(shù)值

from flask import Flask,Blueprint,current_appfrom db_handler import find_items#創(chuàng)建藍圖 item_bp=Blueprint('item',__name__)#藍圖中創(chuàng)建視圖函數(shù) @item_bp.route('/get') def hello_item():print(current_app.zilv)return "產(chǎn)品模塊的頁面"

特別注意:current_app是app的代理對象,在藍圖中,任何地方不方便取app文件中參數(shù)的情況下,都可以用current_app來獲得

三、G對象

g 作為 flask 程序全局的一個臨時變量,充當中間媒介的作用,我們可以通過它在一次請求調(diào)用的多個函數(shù)間傳遞一些數(shù)據(jù)。每次請求都會重設(shè)這個變量

案例:

在視圖中,通過g對象獲得了從客戶端傳來的數(shù)據(jù),

from flask import Flask,Blueprint,current_app,gfrom db_handler import find_items#創(chuàng)建藍圖 item_bp=Blueprint('item',__name__)#藍圖中創(chuàng)建視圖函數(shù) @item_bp.route('/get') def hello_item():print(current_app.zilv)#從請求參數(shù)中獲得g.item_id='666'g.item_name='qqq'find_items()return "產(chǎn)品模塊的頁面"

在另外一個應(yīng)用文件中想獲得從客戶端傳來的數(shù)據(jù),也通過g對象
例如

from flask import gdef find_items():print('從數(shù)據(jù)庫中查詢數(shù)據(jù),通過多個不確定的條件')print(g.item_id)print(g.item_name)

運行結(jié)果:

hello zilv 從數(shù)據(jù)庫中查詢數(shù)據(jù),通過多個不確定的條件 666 qqq

而如果不用g對象的話 舉例:

藍圖視圖模塊

from register import register_bp from flask import Flask,render_template,current_app from register.handle_db import handle@register_bp.route('/view') def register_view():print(current_app.kobe)user_id='666'handle()return 'ok'

獲得視圖中的數(shù)據(jù)模塊

from flask import Flaskdef handle():print(user_id)

執(zhí)行項目后:NameError: name ‘user_id’ is not defined


所以:g 作為 flask 程序全局的一個臨時變量,充當中間媒介的作用,我們可以通過它在一次請求調(diào)用的多個函數(shù)間傳遞一些數(shù)據(jù)。每次請求都會重設(shè)這個變量

總結(jié)

以上是生活随笔為你收集整理的【Flask】flask上下文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。