处理响应
需求
4 自定义状态码和响应头
如何在不同的场景里返回不同的响应信息?
1 返回模板使用render_template
方法渲染模板并返回
例如,新建一个模板index.html
Title
我的模板html内容
{{ my_str }}
{{ my_int }}
后端视图
from flask import render_template
@app.route('/')
def index():
mstr = 'Hello 黑马程序员'
mint = 10
return render_template('index.html', my_str=mstr, my_int=mint)
示例代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
mstr = 'Hello world'
mint = 10
return render_template('index.html', my_str=mstr, my_int=mint)
if __name__ == '__main__':
app.run()
运行效果:
示例代码2:【对上面代码稍做改变】
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
# mstr = 'Hello world'
# mint = 10
data = dict(
my_str='Hello world',
my_int=10
)
# return render_template('index.html', my_str=mstr, my_int=mint)
return render_template('index.html', **data)
if __name__ == '__main__':
app.run()
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/demo2')
def demo2():
return redirect('http://www.baidu.com')
if __name__ == '__main__':
app.run()
3 返回JSON
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/demo3')
def demo3():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
if __name__ == '__main__':
app.run()
运行结果:

1) 元祖方式
可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
from flask import Flask
app = Flask(__name__)
@app.route('/demo4')
def demo4():
# return '状态码为 666', 666
# return '状态码为 666', 666, [('Itcast', 'Python')]
return '状态码为 666', 666, {'Itcast': 'Python'}
if __name__ == '__main__':
app.run()
2) make_response方式
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/demo5')
def demo5():
resp = make_response('make response测试')
resp.headers['Itcast'] = 'Python'
resp.status = '406 not found'
return resp
if __name__ == '__main__':
app.run()