Flask高階應用02 請求和反向解析

2021-08-28 21:00:11 字數 3333 閱讀 8860

1. 請求request

服務端在接收到客戶端的請求後,會自動建立request物件,由flask框架建立,request物件不可修改

@blue.route('/request/',methods=['get','post','put'])

def get_request():

# 請求上下文 request,

# 獲取get請求傳遞的引數:request.args.get(key)/request.args.getlist(key)

# 獲取post、put、patch、delete請求傳遞的引數: request.form.get(key)/request.form.getlist(key)

# 判斷http請求方式: request.method

pass

屬性:

base_url:去掉get引數的url

host_url:只有主機和埠號的url

path:路由中的路徑

method:請求方法

args:get請求引數

form:post請求引數

files:檔案上傳

headers:請求頭

cookies:請求中的cookie

(1) args–>get請求引數包裝

a)args是get請求引數的包裝,args是乙個immutablemultidict物件,類字典結構物件

b)資料儲存也是key-value

(2) form–>post請求引數包裝

a)form是post請求引數的包裝,args是乙個immutablemultidict物件,類字典結構物件

b)資料儲存也是key-value

重點:immutablemultidict是類似字典的資料結構,但是與字典的區別是,可以存在相同的鍵。

在immutablemultidict中獲取資料的方式,dict[『key』]或者dict.get(『key』)或者dict.getlist(『key』)

2.響應(make_response命令)

response是由開發者自己建立的

建立方法:

from flask import make_response

make_response建立乙個響應,是乙個真正的response物件

狀態碼:

格式:make_reponse(data,code),其中data是返回的資料內容,code是狀態碼

a)直接將內容當做make_response的第乙個引數,第二個引數直接寫返回的狀態碼

b)直接在render後加返回的狀態碼

例子1:

定義乙個獲取get請求的request的方法,並將返回成功的請求的狀態碼修改為200

@blue.route('/getrequest/', methods=['get'])

def get_request():

print(request)

return '獲取request', 200

例子2:

返回response響應,並新增返回結果的狀態碼200

@blue.route('/getresponse/')

def get_response():

response = make_response('', 500)

return response

或者:

@blue.route('/getresponse/', methods=['get'])

def get_user_response():

login_html = render_template('login.html')

res = make_response(login_html, 200)

return res

3. 重定向/反向解析
redirect 重定向操作,這個和django中類似

url_for('藍圖定義的名稱.方法名')

例子1:

定義跳轉方法,跳轉到get_response的方法上

@blue.route('/getredirect/')

def get_redirect():

return redirect('getresponse')

例子2:

使用url_for反向解析

from flask import redirect, url_for

@blue.route('/getredirect/')

def get_redirect():

return redirect(url_for('first.get_response'))

4. 終止/異常捕獲

自動丟擲異常:abort(狀態碼)

捕獲異常處理:errorhandler(狀態碼),定義的函式中要包含乙個引數,用於接收異常資訊

(1 )定義終止程式

@blue.route('/make_abort/')

def get_abort():

abort(400)

return '終止'

(2 )捕獲定義的異常
@blue.errorhandler(400)

def handler(exception):

return '捕獲到異常資訊:%s' % exception

【例】

@blue.route('/index/',methods=['get'])

def index():

a = int(request.args.get('a'))

b = int(request.args.get('b'))

try:

a/bexcept exception as e:

print(e)

# 丟擲異常

abort(500)

return render_template('index.html')

@blue.errorhandler(500)

def erro500(exception):

return '捕捉異常,錯誤資訊為: %s' % exception

Flask 應用和請求上下文

from flask import request defindex user request.headers.get user agent return you browserid format user 標題flask應用上下文和請求上下文 變數名上下文說明 應用上下文 當前應用的應用例項 g應...

HTTP協議02 請求和響應的報文構成

http協議和tcp ip協議族內的其他眾多協議相同,用於客戶端與伺服器之間的通訊,請求訪問文字或影象等資源的一端 稱為客戶端,而提供資源響應的一端稱為服務端。應用http協議時,請求必定是客戶端發出,而服務端響應該請求並返回。請求報文的構成 1.請求方法 請求uri 協議版本 2.可選的請求首部字...

Flask 中請求鉤子的理解和應用?

請求鉤子是通過裝飾器的形式實現的,支援以下四種 1,before first request 在處理第乙個請求前執行 2,before request 在每次請求前執行 3,after request 如果沒有未處理的異常丟擲,在每次請求後執行 4,teardown request 即使有未處理的異...