上下文:至關於一個容器,保存了 Flask 程序運行過程當中的一些信息。python
Flask中有兩種上下文,請求上下文和應用上下文
請求上下文(request context)
在 flask 中,能夠直接在視圖函數中使用 request 這個對象進行獲取相關數據,而 request 就是請求上下文的對象,保存了當前本次請求的相關數據,請求上下文對象有:request、session
request
封裝了HTTP請求的內容,針對的是http請求。舉例:user = request.args.get('user'),獲取的是get請求的參數。
session
用來記錄請求會話中的信息,針對的是用戶信息。舉例:session['name'] = user.id,能夠記錄用戶信息。還能夠經過session.get('name')獲取用戶信息。
應用上下文(application context)
它的字面意思是 應用上下文,但它不是一直存在的,它只是request context 中的一個對 app 的代理(人),所謂local proxy。它的做用主要是幫助 request 獲取當前的應用,它是伴 request 而生,隨 request 而滅的。
應用上下文對象有:current_app,g
current_app
應用程序上下文,用於存儲應用程序中的變量,能夠經過current_app.name打印當前app的名稱,也能夠在current_app中存儲一些變量,例如:
應用的啓動腳本是哪一個文件,啓動時指定了哪些參數
加載了哪些配置文件,導入了哪些配置
連了哪一個數據庫
有哪些public的工具類、常量
應用跑再哪一個機器上,IP多少,內存多大
current_app.name
current_app.test_value='value'
g變量
g 做爲 flask 程序全局的一個臨時變量,充當者中間媒介的做用,咱們能夠經過它傳遞一些數據,g 保存的是當前請求的全局變量,不一樣的請求會有不一樣的全局變量,經過不一樣的thread id區別
g.name='abc'
注意:不一樣的請求,會有不一樣的全局變量
二者區別:
請求上下文:保存了客戶端和服務器交互的數據
應用上下文:flask 應用程序運行過程當中,保存的一些配置信息,好比程序名、數據庫鏈接、應用信息等數據庫
上邊所提的g變量就至關於python中的全局變量,並且能夠跨文件使用,具體以下:flask
首先創一個py文件 裏邊寫好g變量的內容,如:服務器
# -*- encoding: utf-8 -*-
#導入g模塊
from flask import Flask,g def check_username(): g.username = '你好' print(g.username)
在另外一個py文件直接以導包的方法導入文件名和方法名cookie
from 文件名 import 方法名session
代碼以下:app
# -*- encoding: utf-8 -*- #g至關與globle current_app是當前的應用 from flask import Flask,current_app,g #從自定義的工具類文件內部引入check_username方法
#utils是剛剛g方法的文件名
from utils import check_username #創建對象 app=Flask(__name__) #載入配置文件 app.config.from_pyfile('config.ini') @app.route('/',methods=['POST','GET']) def index(): #current_app模塊用來存儲當前應用的具體配置信息 # print(current_app.__dict__) #打印全局對象g裏面自定義的屬性username check_username() return '這裏是首頁' if __name__ == "__main__": app.run()
flask的request模塊的屬性以下:函數
method:請求的方法(get或者post)
form:返回form的內容
args和values:args返回請求中的參數,values返回請求中的參數和form
cookies:cookies信息
headers:請求headers信息,返回的結果是個list
date、files:date是請求的數據,files隨請求上傳的文件工具
代碼效果以下:post
# -*- encoding: utf-8 -*- from flask import Flask,request app=Flask(__name__) app.config.from_pyfile('config.ini') @app.route('/',methods=['POST','GET']) def index(): #打印頭部信息 print(request.headers) #打印請求的方式 print(request.method) #打印出請求的url地址 print(request.url) #打印使用的cookie信息 print(request.cookies) #打印網址的參數信息 print(request.args.get('id')) #打印某個對象全部的屬性 print(request.__dict__) return '這裏是首頁' if __name__ == "__main__": app.run()