6. flask中视图函数Response返回值详解

视图函数中可以返回哪些值:

  1. 可以返回字符串:返回的字符串其实底层将这个字符串包装成了一个Response对象。
  2. 可以返回元组:元组的形式是(响应体,状态码,头部信息),也不一定三个都要写,写两个也是可以的。返回的元组,其实在底层也是包装成了一个Response对象。
  3. 可以返回Response及其子类。

实现一个自定义的Response对象:

  1. 继承自Response类。
  2. 实现方法force_type(cls,rv,environ=None)
  3. 指定app.response_class为你自定义的Response对象。
  4. 如果视图函数返回的数据,不是字符串,也不是元组,也不是Response对象,那么就会将返回值传给force_type,然后再将force_type的返回值返回给前端。

demo

from flask import Flask, Response, jsonify, render_template
# flask = werkzeug + sqlalchemy + jinja2


app = Flask(__name__)


# 将视图函数中返回的字典,转换成json对象,然后返回
# restful-api
class JSONResponse(Response):

    @classmethod
    def force_type(cls, response, environ=None):
        """
        这个方法只有视图函数返回非字符、非元组、非Response对象才会调用
        response:视图函数的返回值
        """
        # 判断是否为字典
        if isinstance(response, dict):
            # jsonify除了将字典转换成json对象,还将改对象包装成了一个Response对象
            response = jsonify(response)
        return super(JSONResponse, cls).force_type(response, environ)

app.response_class = JSONResponse


@app.route('/')
def hello_world():
    # Response('Hello World!',status=200,mimetype='text/html')
    return 'Hello World!'


@app.route('/list1/')
def list1():
    resp = Response('list1')
    # response.set_cookie(key,value[,max_age=None,exprise=None)]
    """
        response.set_cookie(key,value[,max_age=None,exprise=None)]
            max_age: 整数,指定cookie过期时间
            expries: 整数,指定过期时间,可以指定一个具体日期时间
            max_age和expries两个选一个指定
    """
    resp.set_cookie('country','china')
    return resp


# 返回元组
@app.route('/list2/')
def list2():
    return 'list2',200,{'MY-NAME':'cuiky'}


@app.route('/list3/')
def list3():
    return {'username':'cuiky','age':23}


if __name__ == '__main__':
    app.run(debug=True,port=8000)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值