在HTTP响应中,数据可以通过多种格式传输。
不同的响应数据格式需要设置不同的MIME类型,MIME类型在首部的Content-Type字段中定义。
我们以默认的HTML类型为例,Content-Type内容如下:
Content-Type: text/html; charset=utf-8
但是在特定的情况下,也会使用其他格式。我们可以通过Flask提供的make_response()方法生成响应对象,传入响应的主体作为参数,然后使用响应对象的mimetype属性设置MIME类型。
常用的数据格式有纯文本、HTML、XML和JSON,它们对应的MIME类型如下
纯文本:text/plain
HTML: text/html
XML:application/xml
JSON:application/json
1、响应格式:text/plain,代码如下:
# run.py
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/index')
def index():
response = make_response('Hello World')
response.mimetype = 'text/plain'
return response
if __name__ == '__main__':
app.run(debug=True)
运行run.py文件,在浏览器中访问网址127.0.0.1:5000/index,结果如下图所示
2、响应格式:application/json,完整示例代码如下:
# run.py
from flask import Flask, make_response, json
app = Flask(__name__)
@app.route('/index')
def index():
data = {'name':'Andy', 'age':18}
# 调用dumps()方法将字典、列表或元组序列化(serialize)为JSON字符串
response = make_response(json.dumps(data))
response.mimetype = 'application/json'
return response
if __name__ == '__main__':
app.run(debug=True)
运行run.py文件,在浏览器中访问网址127.0.0.1:5000/index,结果如下图所示
3、返回结果json格式化:我们也可以使用Flask提供的jsonify()函数,只要传入数据或参数,它会对传入的参数进行序列化,转换成JSON字符串作为响应的主体,然后生成一个响应对象,并且设置正确的MIME类型,代码如下:
# run.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/index')
def index():
# return jsonify({'name':'Andy', 'age':18})
return jsonify(name='Andy', age=18)
if __name__ == '__main__':
app.run(debug=True)
运行run.py文件,在浏览器中访问网址127.0.0.1:5000/index,结果如下图所示:
4、请求参数的json格式化
详细代码如下:
# run.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
@app.route('/test', methods=["POST"])
def first_post():
try:
my_json = request.get_json()
print(my_json)
get_name = my_json.get("name")
get_age = my_json.get("age")
if not all([get_name, get_age]):
return jsonify(msg="缺少参数!!")
get_age = get_age + 10
return jsonify(name=get_name, age=get_age)
except Exception as e:
print(e)
return jsonify(msg="提交数据出现错误!!")
if __name__ == '__main__':
app.run(debug=True)
运行run.py文件,在Postman工具进行如下操作及返回结果如下:
全部评论