Flask Response響應(flask中設置響應信息的方法,返回json數據的方法)

設置響應信息的方法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

相關文章
相關標籤/搜索