在 Flask 中,响应使用 Response 对象表示,响应报文中的大部分内容由服务器处理,一般情况下,我们只负责返回主体内容即可。在之前的文章中,我们了解到 Flask 会先匹配请求 url 的路由,调用对应的视图函数,视图函数的返回值构成了响应报文的主体内容。
如果视图函数只返回一个元素的话,Flask
会创建 Response
对象,Response
将该返回值作为主体内容,状态码默认为200,MIME
的类型为text/html
,然后返回该 Response
对象。
其实视图函数可以返回最多由个元素组成的元组:响应主体、状态码、首部字段。我们也可以指定这三个元素的值。
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()
视图函数返回一个元组,那么状态码 status
值会覆盖默认的200状态码,headers
可以是一个列表或者字典,作为额外的消息头。
其实我们也可以先构建 Response
响应对象,设置一些参数(比如状态码,响应头等)后,然后直接返回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()
方法就是用来构建response
对象的,第二个参数表示响应状态码,默认是200。
之前的案例都是返回的纯文本格式,但是在实际开发中一般都是返回 json
格式,那该怎么做呢?
我们都知道 Python
标准库中的json
模块为程序提供了 JSON
格式支持,Flask 也在json
包的基础上做了一些功能的封装,我们可以直接导入 Flask
的 json
包,将数据序列化为 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()方
法,我们仅需要传入数据或者参数等,它会对我们传入的数据进行序列化,转换成 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()
方法接收多种形式的参数,可以传入普通参数,也可以传入关键字参数,使用非常方便。
到此这篇关于 Flask response
对象详情的文章就介绍到这了,更多相关 Flask response
对象内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7030400306454200333