設置響應信息的方法html
1. 返回自定義的響應頭,有兩種方式:前端
(1) 第一種是:視圖函數return的時候,使用元組,返回自定義的信息python
返回的時候的狀態碼能夠自定義信息:"狀態碼 自定義的信息", web
例如: 能夠把下面代碼中的400,改爲自定義的狀態碼: "666 custom info"json
from flask import Flask app = Flask(__name__) @app.route("/index") def index(): """ 1. 使用元組,返回自定義的響應信息 返回響應體,狀態碼,響應頭 return 多個值時,就會是一個元組的形式 """ """ 除了用字典的形式,也能夠用字典的形式 return "index page", 400, {"Itcast": "python", "City": "beijing"} """ return "index page", 400, [("Itcast", "python"), ("City", "beijing")] if __name__ == '__main__': app.run(debug=True)
訪問網頁後,能夠看到自定義的響應頭信息, 固然能夠設置標準的響應頭信息,根據需求,這是經過元組的方式flask
注意, 在return值的時候瀏覽器
能夠只給前端傳響應體和狀態碼,不傳響應頭服務器
但不能夠只傳響應體和響應頭,即有響應頭,必需要有狀態碼app
它是有順序的,第一個響應體,第二個狀態碼,第三個響應頭,能夠從後面省但不可從前面省函數
(2) 第二種方式: 使用make_response 來構造響應信息(從flask中導入make_response)
resp = make_response("響應體")
resp.status = "狀態碼,能夠是自定義的狀態碼"
resp.headers["鍵"] = "值" # 經過字典的形式設置響應頭
from flask import Flask, make_response app = Flask(__name__) @app.route("/index") def index(): # 2. 使用make_response 來構造響應信息 resp = make_response("index page2") # 響應體數據 resp.status = "999 itcast" # 狀態碼 resp.headers["City"] = "ShangHai" # 經過字典的形式添加響應頭 return resp if __name__ == '__main__': app.run(debug=True)
訪問網頁看到的結果是同樣的
2. 給前端返回json數據:
1. 經過傳統的方式,先構造一個字典,而後通過json模塊轉化爲字符串
,視圖函數返回字符串以及修改響應頭的類型接口
2.經過flask中的 jsonify來進行返回
有兩種方式 第一種是把構造好的字典直接傳進去返回便可 return jsonify(構造的字典)
第二種是直接在jsonify() 裏面進行構造 return jsonify(鍵=值,鍵=值) ,其效果是同樣的
from flask import Flask, jsonify import json app = Flask(__name__) @app.route("/index") def index(): """向前端返回json類型的數據""" data = { "name": "python", "age": 18 } """ 傳統的方式去傳遞 # json.dumps(字典) 將Python的字典轉換爲json的字符串 # json.loads(字符串) 將字符串轉換爲Python中的字典 json_str = json.dumps(data) # 改變,響應頭的類型 return json_str,200,{"Content-Type":"application/json"} """ ''' jsonify()的使用 1.jsonify()幫助轉爲json數據,並設置響應頭 Content-Type 爲 application/json 2. 能夠不用提早構造好字典,直接返回,結果是同樣的 return jsonify(City="Beijing",age=20) ''' return jsonify(data) if __name__ == '__main__': app.run(debug=True)
訪問網頁後:
無論咱們使用什麼語言開發,既然咱們作的是web,都遵循的是HTTP協議,那麼既然遵循這個協議,咱們客戶端發送請求,發送的就是Request對象,服務器接收到請求,給咱們返回數據,返回的就是Response對象。
和Request同樣,Response一樣是一個對象。咱們客戶端(瀏覽器)的request對象發送到服務器端,服務器作出響應,把response對象發送給客戶端。咱們也不能把response就認爲是咱們看到的五光十色的頁面,那只是response中的body的一部分。它還有headers等信息,並且咱們作技術的,服務器端發送出來的response咱們是能夠參與其中的,就是咱們能夠控制服務器端返回給客戶端的是什麼。接下來就讓咱們來直觀感覺一下。
Response直觀感覺
咱們先去訪問一下網易雲音樂的首頁,看看網易服務器給咱們返回了的東西大概都有哪些。
首先咱們看一下返回的response的頭部信息:有狀態碼:200,還有一堆屬性的東西。以下圖:
而後看一下response的body,就是咱們看到的瀏覽器給咱們渲染成的美好的頁面。以下圖:
以上呢,就是一個成熟的服務器給咱們返回來的東西,就是這個response對象。
參與到Response中
首先我在pycharm中建立了個flask項目,而後在templates裏面寫了個resp.html文件,在 .py 文件中寫了路由視圖函數等,如圖:圖中標明信息
這是resp.html文件:
這是.py 文件:
而後咱們運行,查看結果:發現是否是resp.html中寫了什麼,這裏就顯示了什麼,由於咱們指定了發送的格式是純文本,因此瀏覽器接收到以後就按純文本處理了。
咱們看一下具體的response信息:發現咱們成功訪問了,而狀態碼是404,並且類型也是text/plain.這和邏輯不符合,不要緊,這就是由於咱們參與了response的結果。這時候你是否是發現瀏覽器很傻,你告訴它啥,它就信啥。
而後咱們修改咱們的代碼,把格式和狀態碼改成正常的。
而後來看咱們的運行結果:終於像個平時看到的網頁了。
再來看它的response信息:發現咱們告訴瀏覽器我發過來的格式是html。那瀏覽器就把剛纔的html成功渲染了,而不是純文本發送過來了。並且狀態碼也成功的表示爲200了。正確了。
總結:
經過以上簡單的小栗子,咱們發現服務器給客戶端的response對象咱們是能夠參與其中的。並非說咱們寫了個html,客戶請求過來了,咱們就把html發送過去了。這裏不少東西咱們都是能夠參與的。
https://blog.csdn.net/wei18791957243/article/details/85161993
http://www.javashuo.com/article/p-ulwixvfa-er.html