问题:视图函数的 return 和 普通函数的 return 有什么区别。

视图函数会返回状态码(status)、content-type(放置在http请求的headers中)。content-type 还会告诉 http 请求的接收方如何解析返回的主体内容。Flask 中 content-type 默认是 text/html 。

视图函数返回的内容永远是 Response 对象。返回对象的写法有两种方式。

方式一:make_response

举例一:

from flask import Flask, make_response

app = Flask(__name__)
# 载入整个配置文件
app.config.from_object('config') # from_object需要接收模块的路径


def hello():
headers = {
'content-type': 'text/plain'
}
content = '<html></html>'
response = make_response(content, 201)
response.headers = headers
return response


app.add_url_rule('/hello/', view_func=hello)
if __name__ == '__main__':
# 生产环境 nginx + uwsgi服务器
# 访问配置参数 因为app.config是dict的子类
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)

响应对象Response_flask

举例二:重定向

from flask import Flask, make_response

app = Flask(__name__)
# 载入整个配置文件
app.config.from_object('config') # from_object需要接收模块的路径


def hello():
headers = {
'content-type': 'text/plain',
'location': 'http://www.baidu.com'
}
content = '<html></html>'
response = make_response(content, 301)
response.headers = headers
return response


app.add_url_rule('/hello/', view_func=hello)
if __name__ == '__main__':
# 生产环境 nginx + uwsgi服务器
# 访问配置参数 因为app.config是dict的子类
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)

响应对象Response_生产环境_02

方式二:逗号分隔返回

from flask import Flask, make_response

app = Flask(__name__)
# 载入整个配置文件
app.config.from_object('config') # from_object需要接收模块的路径


def hello():
headers = {
'content-type': 'text/plain',
'location': 'http://www.baidu.com'
}
return '<html></html>', 301, headers


app.add_url_rule('/hello/', view_func=hello)
if __name__ == '__main__':
# 生产环境 nginx + uwsgi服务器
# 访问配置参数 因为app.config是dict的子类
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)