关于响应 (Response)
视图函数中的返回值会被自动转换为一个响应对象,在Flask
中的转换逻辑如下:
-
如果返回的是一个合法的响应对象,则直接返回。
from flask import Flask, Response # 因为在flask中导入过了Response, 所以Response可以直接从此处导入 @app.route('/') def index(): return Response('首页')
-
如果返回的是一个字符串,那么
Flask
会自动创建一个werkzeug.wrappers.Response
对象,Response对象将该字符串作为主体,状态码为200,MIME
类型为text/html
, 然后返回该Response对象.@app.route('/') def index(): # return '首页' # 返回一个字符串,转换逻辑如下: response = Response('首页', status=200, mimetype='text/html; charset=utf-8') return response
-
如果返回的是一个元组,元组中的数据类型是(response, status, headers)。status值会覆盖默认的200的状态码,headers可以是列表或者字典,作为额外的参数头.
@app.route('/list/') def my_list(): # 三个参数,可以不写全 # return 'list', 200 return ('list', 200) return ('list', 200, {'name': 'cheng'}) # return ('list2', 300, {'name': 'cheng'}) # return 'list2', 300, {'name': 'cheng', 'age': 18, 'sex': 'man', 'country': 'china'} # return 'list2', 200, [('name', 'cheng'), ('age', 18)]
-
如果以上都不满足,
Flask
会假设返回值是一个合法的WSGI
应用程序,并通过Response.force_type(rv, request, environ
转换为一个请求对象.