问题:视图函数的 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')
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__':
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)
举例二:重定向
from flask import Flask, make_response
app = Flask(__name__)
app.config.from_object('config')
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__':
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)
方式二:逗号分隔返回
from flask import Flask, make_response
app = Flask(__name__)
app.config.from_object('config')
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__':
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=8800)
|