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內容類型。