视图函数返回与普通函数的返回不同,视图函数返回的是一个response
对象。
fisher.py
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
@app.route('/')
def index():
return '<div></div>'
def hello_world():
return '<div></div>'
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000', debug= app.config['DEBUG']
上面定义了两个方法,index是一个视图函数,hello_world是一个普通函数。虽然他们两个返回的<div></div>
,但是在index
视图返回不是一个字符串,而是一个respones对象。通过运行上面代码
我们在index视图函数中明明返回了<div></div>
字符串,但是访问index视图函数中没有输出<div></div>
字符串?这是因为在index视图函数中,return时将<div></div>
封装成了一个response
对象,response对象headers中Content-Type
默认值是text/html;
所以浏览器解析时,就不按字符串来解析内容,而按html来解析,所以不会显示<div></div>
内容。
如果想让浏览器以文本方式来解析,而不是以html来解析,修改下面代码
修改fisher.py
+ from flask import Flask, make_response
app = Flask(__name__)
app.config.from_object('config')
@app.route('/')
def index():
+ headers = {
+ 'content-type': 'text/plain'
+ }
+
+ response = make_response('<div></div>', 404)
+ response.headers = headers
+ return response
+
+ # 简化写法
+ # return ('<div></div>', 404, headers)
def hello_world():
return '<div></div>'
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000', debug= app.config['DEBUG'])
启动一下服务(在虚拟环境)
python fisher.py
通过返回内容,我们看到<div></div>
显示出来,headers的content-type发生改变,在上面代码中,我们不仅仅改变了headers头部信息,还修改了了返回的状态码404
在写API中,其实返回的是JSON数据格式.
headers = {
'content-type': 'application/json;charset=utf-8'
}
json = {
'name':'张三',
'sex':'男'
}
return (json, 200 , headers)