目錄
- 引言
- response響應(yīng)
- 元組形式響應(yīng)
- make_response函數(shù)
- 返回json格式數(shù)據(jù)
- 其他特殊響應(yīng)
- 源代碼
引言
客戶端發(fā)送 http 請(qǐng)求給 Flask程序,F(xiàn)lask 調(diào)用視圖函數(shù)后,會(huì)將其返回值作為響應(yīng)的內(nèi)容。大多情況下,響應(yīng)就是一個(gè)簡單的字符串,作為 Html 頁面回送客戶端。
但 http 協(xié)議需要的不僅是作為請(qǐng)求響應(yīng)的字符串。http 響應(yīng)中有一個(gè)很重要的部分是狀態(tài)碼,F(xiàn)lask設(shè)為200,代表請(qǐng)求已被成功處理。
response響應(yīng)
元組形式響應(yīng)
如果視圖函數(shù)返回的響應(yīng)還需要使用不同的狀態(tài)碼,那么可以把數(shù)字代碼作為第二個(gè)返回值,添加到響應(yīng)文本之后
from flask import Flask
app = Flask(__name__)
# 以元組形式返回響應(yīng)信息
@app.route("/index")
def index():
# 響應(yīng)體 狀態(tài)碼
return "index page", 400
視圖函數(shù)返回的響應(yīng)還可以接受第三個(gè)參數(shù),響應(yīng)頭也可以繼續(xù)放在后面返回,例如:
from flask import Flask
app = Flask(__name__)
# 以元組形式返回響應(yīng)信息
@app.route("/index")
def index():
header_dict = {
"name": "jack",
"age": 22
}
header_list = [("name", "hui"), ("age", 21)]
# 響應(yīng)體 狀態(tài)碼 響應(yīng)頭
return "index page", 400, header_dict
# return "index page", 400, header_list
但響應(yīng)頭信息要用一個(gè)字典或列表包裝起來,字典好理解,列表里面則是以元組形式存儲(chǔ)響應(yīng)頭信息。這里返回的只是做個(gè)例子,真正返回的時(shí)候,要合理設(shè)置響應(yīng)頭信息,例如
header_dict = {
"Content-Type": " text/html; charset=utf-8", # 響應(yīng)返回的數(shù)據(jù)類型
"Set-Cookie": "name=hui; Path=/" # 響應(yīng)設(shè)置cookie
}
return "index page", 200, header_dict
瀏覽器開發(fā)者工具查看響應(yīng)信息
切記:以元組形式返回,返回值位置不能夠亂
第一個(gè)對(duì)應(yīng)響應(yīng)體
第二個(gè)對(duì)應(yīng)狀態(tài)碼
第三個(gè)對(duì)應(yīng)響應(yīng)頭
make_response函數(shù)
如果不想返回由1個(gè)、2個(gè)或3個(gè)值組成的元組,F(xiàn)lask視圖函數(shù)還可以返回 Response 對(duì)象。make_response 函數(shù)可接受1個(gè)、2個(gè)或3個(gè)參數(shù)(和視圖函數(shù)的返回值一樣),并返回一個(gè)Response對(duì)象。看看到底如何使用
from flask import Flask, make_response
app = Flask(__name__)
# mk_response 設(shè)置響應(yīng)信息
@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() 對(duì)象設(shè)置狀態(tài)碼時(shí)必須字符串,不要寫成了數(shù)字
返回json格式數(shù)據(jù)
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 模塊進(jìn)行數(shù)據(jù) json化,但一般返回json數(shù)據(jù)要設(shè)置前端返回的數(shù)據(jù)類型,F(xiàn)lask默認(rèn)的是text/html,因此我們還需在單獨(dú)設(shè)置響應(yīng)體內(nèi)容類型。
由于json格式數(shù)據(jù)在Web開發(fā)中使用頻繁,在 Flask 中專門提供了 jsonify() 函數(shù)進(jìn)行 json數(shù)據(jù)的響應(yīng)
具體使用如下
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()可以接收一個(gè)字典,也可以 key-value 形式來構(gòu)造 json 數(shù)據(jù)。這樣就方便許多
其他特殊響應(yīng)
redirect() 重定向
有一種名為重定向的特殊響應(yīng)類型。這種響應(yīng)類型沒有頁面文檔,只告訴瀏覽器一個(gè)新地址用以加載新頁面
from flask import Flask, redirect
app = Flask(__name__)
# 自己設(shè)置重定向信息
@app.route('/baidu')
def red_baidu():
resp = make_response()
resp.status = "302"
resp.headers['Location'] = "http://www.baidu.com"
return resp
# redirect 響應(yīng)重定向
@app.route("/csdn")
def red_csdn():
csdn_url = "https://blog.csdn.net/qq_43629857"
return redirect(csdn_url)
重定向的經(jīng)常使用 302 狀態(tài)碼表示,指向的地址由 Location 首部提供。由于使用頻繁,F(xiàn)lask 提供了輔助函數(shù) redirect(),用于生成這種響應(yīng)。
abort() 中斷
abort()接收一個(gè)狀態(tài)碼參數(shù)
from flask import Flask, request, abort
app = Flask(__name__)
# abort中斷
# http://127.0.0.1:5000/login?name=huipwd=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 "登錄成功"
一般這個(gè) abort() 函數(shù)都會(huì)配合錯(cuò)誤信息處理裝飾器 app.errorhandler() 一起使用,如下:
# 處理404狀態(tài)錯(cuò)誤
@app.errorhandler(404)
def handle_404_err(err):
return f"404 錯(cuò)誤信息 {err}"
# 處理500狀態(tài)錯(cuò)誤
@app.errorhandler(500)
def handle_500_err(err):
return f"500 服務(wù)器錯(cuò)誤 {err}"
# abort中斷
# http://127.0.0.1:5000/login?name=huipwd=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) ,歡迎大家來訪。
到此這篇關(guān)于Flask response響應(yīng)的具體使用的文章就介紹到這了,更多相關(guān)Flask response響應(yīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- response.setContentType()參數(shù)以及作用詳解
- Response.AddHeader案例講解
- 如何使用spring ResponseEntity處理http響應(yīng)
- jsp Response對(duì)象頁面重定向、時(shí)間的動(dòng)態(tài)顯示
- JavaWeb入門:HttpResponse和HttpRequest詳解
- ResponseBodyAdvice踩坑及解決
- 基于@RequestBody和@ResponseBody及Stringify()的作用說明
- jsp response.sendRedirect()用法詳解