Flask response響應的具體使用
引言
客戶端發送 http 請求給 Flask程序,Flask 調用視圖函數後,會將其返回值作為響應的內容。大多情況下,響應就是一個簡單的字符串,作為 Html 頁面回送客戶端。
但 http 協議需要的不僅是作為請求響應的字符串。http 響應中有一個很重要的部分是狀態碼,Flask設為200,代表請求已被成功處理。
response響應
元組形式響應
如果視圖函數返回的響應還需要使用不同的狀態碼,那麼可以把數字代碼作為第二個返回值,添加到響應文本之後
from flask import Flask app = Flask(__name__) # 以元組形式返回響應信息 @app.route("/index") def index(): # 響應體 狀態碼 return "index page", 400
視圖函數返回的響應還可以接受第三個參數,響應頭也可以繼續放在後面返回,例如:
from flask import Flask app = Flask(__name__) # 以元組形式返回響應信息 @app.route("/index") def index(): header_dict = { "name": "jack", "age": 22 } header_list = [("name", "hui"), ("age", 21)] # 響應體 狀態碼 響應頭 return "index page", 400, header_dict # return "index page", 400, header_list
但響應頭信息要用一個字典或列表包裝起來,字典好理解,列表裡面則是以元組形式存儲響應頭信息。這裡返回的隻是做個例子,真正返回的時候,要合理設置響應頭信息,例如
header_dict = { "Content-Type": " text/html; charset=utf-8", # 響應返回的數據類型 "Set-Cookie": "name=hui; Path=/" # 響應設置cookie } return "index page", 200, header_dict
瀏覽器開發者工具查看響應信息
切記:以元組形式返回,返回值位置不能夠亂
第一個對應響應體
第二個對應狀態碼
第三個對應響應頭
make_response函數
如果不想返回由1個、2個或3個值組成的元組,Flask視圖函數還可以返回 Response 對象。make_response 函數可接受1個、2個或3個參數(和視圖函數的返回值一樣),並返回一個Response對象。看看到底如何使用
from flask import Flask, make_response app = Flask(__name__) # mk_response 設置響應信息 @app.route("/info") def info(): resp = make_response("info page") resp.status = "666 ithui" resp.headers["name"] = "hui" resp.headers["age"] = 21 return resp
註意:make_response() 對象設置狀態碼時必須字符串,不要寫成瞭數字
返回json格式數據
import json from flask import Flask, make_response app = Flask(__name__) @app.route("/json") def resp_json(): data = { "name": "hui", "age": 21 } json_str = json.dumps(data) headers = {"Content-Type": "application/json"} return json_str, 200, headers
你可以借助 json 模塊進行數據 json化,但一般返回json數據要設置前端返回的數據類型,Flask默認的是text/html,因此我們還需在單獨設置響應體內容類型。
由於json格式數據在Web開發中使用頻繁,在 Flask 中專門提供瞭 jsonify() 函數進行 json數據的響應
具體使用如下
from flask import Flask, jsonify app = Flask(__name__) @app.route("/json") def resp_json(): data = { "name": "hui", "age": 21 } return jsonify(data) # return jsonify(name="jack", age=20)
jsonify()可以接收一個字典,也可以 key-value 形式來構造 json 數據。這樣就方便許多
其他特殊響應
redirect() 重定向
有一種名為重定向的特殊響應類型。這種響應類型沒有頁面文檔,隻告訴瀏覽器一個新地址用以加載新頁面
from flask import Flask, redirect app = Flask(__name__) # 自己設置重定向信息 @app.route('/baidu') def red_baidu(): resp = make_response() resp.status = "302" resp.headers['Location'] = "http://www.baidu.com" return resp # redirect 響應重定向 @app.route("/csdn") def red_csdn(): csdn_url = "https://blog.csdn.net/qq_43629857" return redirect(csdn_url)
重定向的經常使用 302 狀態碼表示,指向的地址由 Location 首部提供。由於使用頻繁,Flask 提供瞭輔助函數 redirect(),用於生成這種響應。
abort() 中斷
abort()接收一個狀態碼參數
from flask import Flask, request, abort app = Flask(__name__) # abort中斷 # http://127.0.0.1:5000/login?name=hui&pwd=123 @app.route("/login", methods=['GET']) def login(): name = request.args.get("name") pwd = request.args.get("pwd") if name != "hui" or pwd != "123": abort(404) return "登錄成功"
一般這個 abort() 函數都會配合錯誤信息處理裝飾器 app.errorhandler() 一起使用,如下:
# 處理404狀態錯誤 @app.errorhandler(404) def handle_404_err(err): return f"404 錯誤信息 {err}" # 處理500狀態錯誤 @app.errorhandler(500) def handle_500_err(err): return f"500 服務器錯誤 {err}" # abort中斷 # http://127.0.0.1:5000/login?name=hui&pwd=123 @app.route("/login", methods=['GET']) def login(): name = request.args.get("name") pwd = request.args.get("pwd") if name != "hui" or pwd != "123": abort(404) return "登錄成功"
源代碼
源代碼已上傳到 Gitee HuiDBK/FlaskBasic – 碼雲 – 開源中國 (gitee.com) ,歡迎大傢來訪。
到此這篇關於Flask response響應的具體使用的文章就介紹到這瞭,更多相關Flask response響應內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python Flask 請求數據獲取響應詳解
- Flask response 對象詳情
- python如何構建mock接口服務
- 使用flask如何獲取post請求參數
- Python Flask前端自動登錄功能實現詳解