美文网首页
Flask中的响应Response

Flask中的响应Response

作者: 张大超Charlie | 来源:发表于2019-03-08 19:04 被阅读0次

响应Response:

视图函数的返回值会自动转换为一个响应对象:

  1. 如果返回的是一个字符串,那么flask会重新创建一个werkzeug,wrappers,Response对象,Response将该字符串作为主体,状态码为200,MIME的类型为text/html,然后返回该Response对象。
  2. 如果返回的是一个元组,元组的数据类型是(response, status, headers).
    status的值会覆盖默认的200状态码,headers可以是一个列表和字典,作为额外的消息头。
  3. 可以返回’Response‘及其子类。
@app.route('/n1/')
def hello_world():
    return 'Hello World!'
    # 等价于
    # Response('Hello World!', status=200, mimetype='text/html')


@app.route('/n2/')
def number_2():
    return 'n2', 200, {'MY-name': 'Charlie'}
# 如果返回的是一个元组,元组的类型是(response, status, headers).
# status值会覆盖默认的200状态码,headers可以是一个列表或者字典,作为额外的消息头。

实现一个自定义’Response‘对象:

  1. 继承自‘Response’类。
  2. 实现方法‘force_type(cls,response,environ=None)。
  3. 指定’app.response_class'为你自定义的'Response'对象。
  4. 如果视图函数的返回数据,不是字符串,也不是元组,也不是Response对象,那么就会将返回值传给‘force_type',然后将force_type的返回值返回给前端。
class JSONResponse(Response): 
    @classmethod
    def force_type(cls, response, environ=None): 
        if isinstance(response, dict):
            response = jsonify(response)
            # jsonify除了将字典转换成json对象,还将把对象包装成一个Response对象
            return super(JSONResponse, cls).force_type(response, environ)
            # return response    


app.response_class = JSONResponse

@app.route('/n3/')
def my_response():
    return {'username': 'charlie', 'age': 20}

相关文章

网友评论

      本文标题:Flask中的响应Response

      本文链接:https://www.haomeiwen.com/subject/cujdpqtx.html