美文网首页
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