Flask高階應用02--請求和反向解析
阿新 • • 發佈:2018-11-09
一、請求和響應
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
屬性:
url:完整的請求地址
base_url:去掉GET引數的url
host_url:只有主機和埠號的url
path:路由中的路徑
method:請求方法
remote_addr:請求的客戶端的地址
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('<h2>我是響應</h2>', 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/b
except Exception as e:
print(e)
# 丟擲異常
abort(500)
return render_template('index.html')
@blue.errorhandler(500)
def erro500(exception):
return '捕捉異常,錯誤資訊為: %s' % exception