需求
如何在不同的场景里返回不同的响应信息?
1 返回模板
flask模板使用render_template
()方法渲染模板并返回
例如,新建一个HTML模板 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我的模板html内容<br/>
{{ my_str }}<br/>
{{ my_int }}
</body>
</html>
后端视图函数与向前端页面传递参数,页面通过模板引擎语法进行渲染
普通传参
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 render_template
@app.route('/index')
def index():
data = dict(
my_int = 123,
my_str = 'itcast'
)
return render_template('index.html',**data)
2 重定向
flask中 redirect()函数进行重定向[二次请求]
from flask import redirect
@app.route('/demo2')
def demo2():
return redirect('http://www.itheima.com')
3 返回JSON
区别:jsonify 与 json.dumps()
json.dumps():仅仅是将数据转换Json格式返回,并未将响应报文里面的响应头【content-Type:application/json】
jsonify:转换成json格式字符串并且设置了响应头【Content-Type:application/json】
from flask import jsonify
@app.route('/demo3')
def demo3():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
4 自定义状态码和响应头
1) 元组方式
可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
@app.route('/demo4')
def demo4():
# return '状态码为 666', 666
# return '状态码为 666', 666, [('Itcast', 'Python')]
return '状态码为 666', 666, {'Itcast': 'Python'}
2) make_response方式
from flask import make_response
@app.route('/demo5')
def demo5():
resp = make_response('make response测试')
resp.headers[“Itcast”] = “Python”
resp.status = “404 not found”
return resp
5 代码示例
from flask import Flask,render_template,jsonify,make_response
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 普通传参
@app.route('/')
def home():
mint = 123
mstring = 'itcast'
return render_template('index.html',my_str = mstring,my_int = mint)
# 字典进行传参
@app.route('/demo2')
def index():
data = dict(
my_int = 123,
my_str = 'itcast'
)
return render_template('index.html',**data)
# 返回Json格式数据
@app.route('/demo3')
def demo3():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
# 返回元组
# 可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。
@app.route('/demo4')
def demo4():
# return '状态码为 666', 666
# return '状态码为 666', 666, [('Itcast', 'Python')]
return '状态码为 666', 666, {'Itcast': 'Python'}
@app.route('/demo5')
def demo5():
resp = make_response('make response测试')
resp.headers["Itcast"] = "Python"
resp.status = "404 not found"
return resp