flask中的response


1、Response

在flask中你想向前端返回數據,必須是Response的對象,這里和django必須是HttpResponse 對象一樣, 主要將返回數據的幾種方式

  1. 視圖函數中return 字符串

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/index")
    def index():
    	return "index.html"
    
    if __name__ == "__main__":
    	app.run()
    
  2. return 多個值

    @app.route("/page_one")
    def page_one():
        return "index.html", "200 Ok", {"name": "aaa"}
    
    

    return后面的值說明:index.html 表示字符串,也就是網站頁面顯示的內容

    '200 ok' 表示狀態碼和對狀態碼的解析

    {"name":"aaa"} 表示請求頭

    請求頭不是必須要的,但是前面兩個必須要,前提你是retrun多個值,還有就是順序不能改變。

  3. return make_response

    @app.route("/page_two")
    def page_two():
        response = make_response('page_two page', 200)
        response.headers["name"] = "page_four"
        return response
    
    
    @app.route("/page_three")
    def page_three():
        response = make_response('page_three page')
        return response, 200, {"name": "page_three"}
    
    
    @app.route("/page_four")
    def page_four():
        response = make_response('page_four page', 200, {"name": "page four"})
        return response
    

    分析下上面的三種方法,都是能夠成功返回的。總結下

    make_response 它可以傳遞三個參數 第一個還是一個字符串,第二個傳狀態碼,第三個傳請求頭,

    關於return 還是和 return 多個值分析差不多,只不過第一個參數不是字符串,而是一個對象了。

  4. return Response對象

    from flask import Response
    
    @app.route("/page_five")
    def page_five():
        response = Response("page five")
        response.status_code = 299
        response.status = "298 notok"
        return response, "297 okok", {"name": "page fiv"}
    

總結:

  1. 視圖函數可以返回一個元組(也就是多個值),返回多個值的話,必須注意順序,第一位必須為字符串或者Response對象,第二個參數應該為狀態碼,第三個參數就是請求頭里的數據了
  2. 如果返回一個值的話,那么就是一個字符串,或者就是Response對象
  3. 還有就是make_response這個函數的返回值應該也是Response的對象,額額,剛剛打印了type(make_response()) 結果為 flask.wrappers.Response ,確實是Response的對象。

render_template : 導入方式 from flask import render_template

def render_template(template_name_or_list, **context):
	pass

它的作用就是模板渲染,最終返回html渲染好了的字符串,它需要傳遞的參數就是 模板的名字,也就是需要渲染的html頁面,還有就是這樣格式的數據:key1 = value1,key2=value2這樣的格式,傳這些變量到模板中,肯定是渲染變量用。

redirect :導入方式 from flask import redirect

def redirect(location, code=302, Response=None):
	pass

它的作用就是重定向,需要傳的參數就是重定向的地址,最終返回的Response的對象

2、Response中的幾個屬性

  1. headers : 設置請求頭信息
  2. status : String類型的數據,格式為這種:"200 ok"
  3. status_code : int 類型,就是狀態碼,但是不能是自定義的狀態碼
  4. data : 需要返回到前端的數據
  5. set_cookie :設置cookie 的值
  6. del_cookie :刪除cookie ,不會立馬刪除瀏覽器上報錯的cookie 值,會講過期時間設置為當前時間,還是cookie 創建的時間,這樣就表示過期了,瀏覽器會自動刪除。

3、寫一個登陸成功設置cookie的例子

from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/login', methods=["get", "post"], endpoint='login')
def login():
    if request.method == "POST":
        response = Response()
        name = request.form.get("name")
        pwd = request.form.get("pwd")
        if name and pwd:
            if name == '朱宇' and pwd == '123':
                response.data = '登陸成功'
                # 注意,我這里只是寫個例子,不會拿明文的賬號密碼設置為cookie
                response.set_cookie('name', '朱宇')
                response.set_cookie('pwd', '123')
            else:
                response.data = '用戶名或密碼錯誤'
        else:
            response.data = '用戶名或密碼不能為空'
        return response
    elif request.method == 'GET':
        # 我這里返回字符串表示一個頁面,你完全可以寫一個html頁面,使用render_template這個方法返回
        return 'login.html'

if __name__ == "__main__":
    app.run(debug=True)

下面我用postman做下測試,

再看上面紅色狂圈住的地方,這就是我們設置的兩個cookies,鼠標點進去看

你們有這樣的疑問的嗎?我最終還是返回的Response的對象,那么瀏覽器是怎么知道我對cookie進行操作呢?

答案在這里,就是響應的請求頭,看看返回了哪些數據

Response 的介紹大概就是這樣,還有其他屬性請參考flask官方API


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM