在 Flask 中,響應使用 Response 對象表示,響應報文中的大部分內(nèi)容由服務器處理,一般情況下,我們只負責返回主體內(nèi)容即可。在之前的文章中,我們了解到 Flask 會先匹配請求 url 的路由,調(diào)用對應的視圖函數(shù),視圖函數(shù)的返回值構(gòu)成了響應報文的主體內(nèi)容。
如果視圖函數(shù)只返回一個元素的話,Flask
會創(chuàng)建 Response
對象,Response
將該返回值作為主體內(nèi)容,狀態(tài)碼默認為200,MIME
的類型為text/html
,然后返回該 Response
對象。
其實視圖函數(shù)可以返回最多由個元素組成的元組:響應主體、狀態(tài)碼、首部字段。我們也可以指定這三個元素的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@app .route( '/hello1' ) def hello1(): return 'Hello 1' # 等價于返回 Response('Hello 1', status=200, mimetype='text/html') @app .route( '/hello2' ) def hello2(): return 'Hello 2' , 201 , { 'my-headers' : 'tigeriaf' } |
上面hello2()
視圖函數(shù)返回一個元組,那么狀態(tài)碼 status
值會覆蓋默認的200狀態(tài)碼,headers
可以是一個列表或者字典,作為額外的消息頭。
其實我們也可以先構(gòu)建 Response
響應對象,設置一些參數(shù)(比如狀態(tài)碼,響應頭等)后,然后直接返回Response
響應對象。
1
2
3
4
5
6
7
8
9
|
@app .route( '/hello3' ) def hello3(): response = make_response( 'hello 3' , 202 ) response.headers[ "my-headers" ] = "tigeriaf" return response |
make_response()
方法就是用來構(gòu)建response
對象的,第二個參數(shù)表示響應狀態(tài)碼,默認是200。
之前的案例都是返回的純文本格式,但是在實際開發(fā)中一般都是返回 json
格式,那該怎么做呢?
我們都知道 Python
標準庫中的json
模塊為程序提供了 JSON
格式支持,F(xiàn)lask 也在json
包的基礎上做了一些功能的封裝,我們可以直接導入 Flask
的 json
包,將數(shù)據(jù)序列化為 json
類型返回,再把Response
對象的 MIME
類型修改為applcation/json
即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@app .route( '/hello4' ) def hello4(): data = { "status" : 0 , "message" : "success" , "data" : { "name" : "tigeriaf" , "age" : 24 } } json_data = json.dumps(data) response = make_response(json_data) response.mimetype = "applcation/json" return response |
除此之外,Flask
還提供了更方便的jsonify()方
法,我們僅需要傳入數(shù)據(jù)或者參數(shù)等,它會對我們傳入的數(shù)據(jù)進行序列化,轉(zhuǎn)換成 JSON 字符串作為響應的主體,然后生成一個響應對象,并且自動設置 MIME 類型,
如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@app .route( '/hello4' ) def hello4(): data = { "status" : 0 , "message" : "success" , "data" : { "name" : "tigeriaf" , "age" : 24 } } return jsonify(data) |
可見,jsonify()
方法大大簡化了我們的代碼,而且jsonify()
方法接收多種形式的參數(shù),可以傳入普通參數(shù),也可以傳入關鍵字參數(shù),使用非常方便。
到此這篇關于 Flask response
對象詳情的文章就介紹到這了,更多相關 Flask response
對象內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7030400306454200333