Flask Response
flask jsonify()函数返回json响应
app = Flask(__name__)
@app.route('/json/<name>')
def index(name):
return jsonify({'Hello':name})这时候content-Type=application/json
如果用python的json.dumps()函数
@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 Response响应类实际上来自Werzeug中的Response类,它继承的是python的BaseResponse类
我们可以自定义响应
>>> from flask import Flask
>>> app = Flask(__name__)
>>> app.make_response(("<h1>Hello word</h1>",201))
<Response 16 bytes [201 CREATED]>make_response接收一个参数,返回信息和状态码都在一个元组里
Response类定义:
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属性可以改变响应类。
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内容类型。
相关推荐
hzyuhz 2020-07-04
washing 2020-05-29
JessePinkmen 2020-05-01
bestallen 2020-08-17
JessePinkmen 2020-07-26
washing 2020-07-18
hzyuhz 2020-06-28
hzyuhz 2020-06-25
苦咖啡flask 2020-06-25
苦咖啡flask 2020-06-25
苦咖啡flask 2020-06-18
washing 2020-06-16
liuweiq 2020-06-14
wushaojun 2020-06-14
JessePinkmen 2020-06-14
kgshuo 2020-06-14
JessePinkmen 2020-06-14