1. 程式人生 > >Flask入門(五)~request模組的屬性及上下文

Flask入門(五)~request模組的屬性及上下文

上下文:相當於一個容器,儲存了 Flask 程式執行過程中的一些資訊。

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中的全域性變數,而且可以跨檔案使用,具體如下:

首先創一個py檔案 裡邊寫好g變數的內容,如:

# -*- encoding: utf-8 -*-
#匯入g模組

from flask import Flask,g

def check_username():
    g.username = '你好'
    print(g.username)

在另一個py檔案直接以導包的方法匯入檔名和方法名

from 檔名 import 方法名

# -*- 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隨請求上傳的檔案

程式碼效果如下:

# -*- 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()

感謝閱讀,送大家一句話:
真正的人生,只有在經過艱難卓絕的鬥爭之後才能實現。