Flask响应结果

Flask的视图函数可返回三个参数,响应内容, 响应码, 响应头。大体有四种情况:

1.响应内容
2.响应内容, 响应码
3.响应内容, 响应头
4.响应内容, 响应码, 响应头

显然这里的重点是响应内容,就视图函数的返回值而言,官方给的定义是可以返回
a string, dict, tuple, Response instance, or WSGI callable

1.响应内容为字符(节)串,字典,会被自动转换成Response对象

返回值类型转换
字符(节)串以该字符为响应体、响应码200、响应类型为text/html的响应对象。
字典以该字典为响应体、响应码200、响应类型为application/json的响应对象。
代码示例:
from flask import Flask, make_response

app = Flask(__name__)
@app.route('/hello')
def hello():
    # 分别返回字符串,字节串,字典
    # return "Hello Flask"
    # return b"Hello Flask"
    return { "text": "Hello Flask" }

2.响应内容为元组,即上面提到2,3,4的三种情况

关于响应码和响应头不太了解的可以去先学习一下HTTP协议相关知识,响应码和响应头可以理解成响应对象的两个属性。
如果响应内容是字符(节)串/字典,和上面一样被自动转换成Response对象。
常见构造Response对象的方法有两种:

2.1.jsonify()
如果响应数据为一个列表,如用户列表信息,则可以使用jsonify()转换成Response对象,当然你也可以手动将字典转换成响应对象,常用于前后端分离项目。

代码示例:

from flask import Flask, jsonify

app = Flask(__name__)
@app.route("/users")
def users_api():
    users = ["Alice", "Bob", "Cindy"]
    return jsonify(users)
    # 你也可以自定义响应头或响应码,如
    # return jsonify(users), 200

2.2.make_response()
函数make_response的参数,和上文提到的视图函数返回值基本一致,不过响应内容只能是字符(节)串/字典,否则就成了套娃了,哈哈~~

2.2.1.返回值为字典,代码示例:

from flask import Flask, make_response

app = Flask(__name__)
@app.route('/hello')
def hello():
    # 响应头 
    headers = {
        'content-type': 'application/json'
    }
    user_details = {
        "username": "Alice"
    }
    response = make_response(user_details)
    return response, 200, headers

2.2.2.返回值为html文本,代码示例:

from flask import Flask, make_response

app = Flask(__name__)
@app.route('/hello')
def hello():
    # 支持html语法
    response = make_response('<h2>hello</h2>')
    return response, 200

2.2.3.返回值为html模板,代码示例:

from flask import Flask, make_response, render_template

app = Flask(__name__)
@app.route('/hello')
def hello():
    # 自定义模板
    temp = render_template('hello.html')
    # 实际上传入还是字符串,render_template帮我们读取了这个文件
    response = make_response(temp)
    return response, 200

也可以直接通过修改make_response()返回值的形式,设置响应头和响应码

from flask import Flask, make_response

app = Flask(__name__)
@app.route('/hello')
def hello():
    headers = {
        'content-type':'text/plain'
    }
    response = make_response("<html></html>", 404)
    response.headers = headers
    # 也可以这样写
    # response.headers["content-type"] = "text/plain"

    return response

关于响应码的格式,可以为符合规范的数字,如200, 400, 也可以是 "200 OK",但是注意,开头一定是数字,然后空格,再是自定义的说明。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值