1、Response
在flask中你想向前端返回數據,必須是Response
的對象,這里和django必須是HttpResponse
對象一樣, 主要將返回數據的幾種方式
-
視圖函數中return 字符串
from flask import Flask app = Flask(__name__) @app.route("/index") def index(): return "index.html" if __name__ == "__main__": app.run()
-
return 多個值
@app.route("/page_one") def page_one(): return "index.html", "200 Ok", {"name": "aaa"}
return后面的值說明:
index.html
表示字符串,也就是網站頁面顯示的內容
'200 ok'
表示狀態碼和對狀態碼的解析
{"name":"aaa"}
表示請求頭請求頭不是必須要的,但是前面兩個必須要,前提你是retrun多個值,還有就是順序不能改變。
-
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
多個值分析差不多,只不過第一個參數不是字符串,而是一個對象了。 -
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"}
總結:
- 視圖函數可以返回一個元組(也就是多個值),返回多個值的話,必須注意順序,第一位必須為字符串或者Response對象,第二個參數應該為狀態碼,第三個參數就是請求頭里的數據了
- 如果返回一個值的話,那么就是一個字符串,或者就是Response對象
- 還有就是
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中的幾個屬性
headers
: 設置請求頭信息status
:String
類型的數據,格式為這種:"200 ok"
status_code
:int
類型,就是狀態碼,但是不能是自定義的狀態碼data
: 需要返回到前端的數據set_cookie
:設置cookie
的值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