视图函数返回与普通函数的返回不同,视图函数返回的是一个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对象。通过运行上面代码

ssl

我们在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

ssl

通过返回内容,我们看到<div></div>显示出来,headers的content-type发生改变,在上面代码中,我们不仅仅改变了headers头部信息,还修改了了返回的状态码404

在写API中,其实返回的是JSON数据格式.

headers = {
    'content-type': 'application/json;charset=utf-8'
}

json = {
    'name':'张三',
    'sex':'男'
}

return (json, 200 , headers)

Flask

Flask 准备工作(1) Flask URL(2) Flask 路由(3) Flask app.run参数(4) Flask 视图函数返回(5)