本文正在參加「Python主題月」,詳情查看 活動連接html
客戶端發送
http
請求給 Flask程序,Flask 調用視圖函數後,會將其返回值做爲響應的內容。大多狀況下,響應就是一個簡單的字符串,做爲 Html 頁面回送客戶端。前端但
http
協議須要的不只是做爲請求響應的字符串。http
響應中有一個很重要的部分是狀態碼,Flask設爲200,表明請求已被成功處理。python
若是視圖函數返回的響應還須要使用不一樣的狀態碼,那麼能夠把數字代碼做爲第二個返回值,添加到響應文本以後git
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
複製代碼
但響應頭信息要用一個字典或列表包裝起來,字典好理解,列表裏面則是以元組形式存儲響應頭信息。這裏返回的只是作個例子,真正返回的時候,要合理設置響應頭信息,例如json
header_dict = {
"Content-Type": " text/html; charset=utf-8", # 響應返回的數據類型
"Set-Cookie": "name=hui; Path=/" # 響應設置cookie
}
return "index page", 200, header_dict
複製代碼
瀏覽器開發者工具查看響應信息flask
切記:以元組形式返回,返回值位置不可以亂瀏覽器
若是不想返回由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()
對象設置狀態碼時必須字符串,不要寫成了數字markdown
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
數據。這樣就方便許多
有一種名爲重定向的特殊響應類型。這種響應類型沒有頁面文檔,只告訴瀏覽器一個新地址用以加載新頁面
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()接收一個狀態碼參數
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),歡迎你們來訪。
✍ 碼字不易,還望各位大俠多多支持❤️。
新建文件夾X
大天然用數百億年創造出咱們現實世界,而程序員用幾百年創造出一個徹底不一樣的虛擬世界。咱們用鍵盤敲出一磚一瓦,用大腦構建一切。人們把1000視爲權威,咱們反其道行之,捍衛1024的地位。咱們不是鍵盤俠,咱們只是平凡世界中不凡的締造者 。