flask jsonify()函数返回json响应html
app = Flask(__name__) @app.route('/json/<name>') def index(name): return jsonify({'Hello':name})
这时候content-Type=application/jsonpython
若是用python的json.dumps()函数json
@app.route('/dumps/<name>') def py(name): return json.dumps({'Hello':name})
这时候content-Type=text/html; charset=utf-8。若是选择响应的格式的话,return json.dumps({'Hello':name}),{'Content-Type':'application/json'} 那么content-Type=application/json就会响应json格式flask
flask Response响应类实际上来自Werzeug中的Response类,它继承的是python的BaseResponse类app
咱们能够自定义响应函数
>>> from flask import Flask >>> app = Flask(__name__) >>> app.make_response(("<h1>Hello word</h1>",201)) <Response 16 bytes [201 CREATED]>
make_response接收一个参数,返回信息和状态码都在一个元组里code
Response类定义:xml
class Response: charset = 'utf-8' default_status = 200 default_mimetype = 'text/html' def __init__(self, response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False): pass @classmethod def force_type(cls, response, environ=None): pass
咱们能够自定义Response的子类,对他的行为作出一些改变,Flask类的response_class属性能够改变响应类。htm
from falsk import FLask, Response calss MyResponse(Response): default_mimetype = 'application/xml' #修改内容类型 class Myfalsk(Flask): response_class = Myresponse @app.route('/') def index(): return '''<?xml version='1.0'encoding="UTF-8"?> <person> <name>Yang</name> </person> ''' 若是想要其余的内容类型,能够设置Content-Type的值: return "{'name':'yang'}",{'Content-Type'='application/json'}
重写Response类来过滤Json格式的内容格式:对象
class Myresponse(Response): @classmethod def force_type(cls, response, environ=None): if isinstance(response, dict): response = jsonify(response) return super().force(response, environ)
重写forec_type来自定义对未知返回对象的处理。falsk只知道对字符串和二进制类型进行处理响应,其余位置类型好比字典都经过forec_type函数进行处理,咱们定义的若是返回的是dict类型那么用flask的jsonify函数转换成json内容类型。