flask-response

flask-response


  • 关于响应:
    • 视图函数的返回值会被自动转换成一个响应对象,flask的转换逻辑如下:
      • 如果返回的是一个字符串,那么flask会重新创建一个werkzeug.wrappers.Response的对象,Response将该字符串作为主体,状态码为200, MIME为text/html,然后返回Response
      • 如果返回的是一个元祖,元祖中的数据类型应该是 (response, status, headers). status值会覆盖默认的200的状态码, header可以是一个列表或者字典,作为消息的响应头。
      • 如果返回的是一个Response对象,则直接返回。
      • 如果以上条件都不满足,flask会去调用Response.force_type来尝试转换为一个这样的请求
    •  1 from flask import Flask, Response, jsonify
       2 
       3 app = Flask(__name__)
       4 
       5 
       6 class JsonResponse(Response):
       7     @classmethod
       8     def force_type(cls, response, environ=None):
       9         if isinstance(response, dict):
      10             response = jsonify(response)
      11         return super(JsonResponse, cls).force_type(response, environ)
      12 
      13 
      14 app.response_class = JsonResponse
      15 
      16 
      17 @app.route('/')
      18 def index():
      19     response = Response(response='HELLO', status=200, content_type='text/html;charset=utf-8')
      20     return response
      21 
      22 
      23 @app.route('/json')
      24 def json_test():
      25     return {'hello': 'world'}
      26 
      27 
      28 if __name__ == '__main__':
      29     app.run()

       

    • flask自定义返回对象类

      • 创建自定义对象类需要继承Response类
      • 当需要返回满足flask原本不支持返回的某种数据类型时,需要重写类方法force_type
      • 然后将处理的response对象让父类的Response来处理
      • 将app的返回类设置为自定义的返回类
posted @ 2019-09-10 22:19  Ivy丶  阅读(343)  评论(0编辑  收藏  举报