Flask response响应的具体使用


Posted in Python onJuly 15, 2021
目录
  • 引言
  • response响应
    • 元组形式响应
    • make_response函数
    • 返回json格式数据
  • 其他特殊响应
    • redirect() 重定向
    • abort() 中断
  • 源代码

 

引言

客户端发送 http 请求给 Flask程序,Flask 调用视图函数后,会将其返回值作为响应的内容。大多情况下,响应就是一个简单的字符串,作为 Html 页面回送客户端。
但 http 协议需要的不仅是作为请求响应的字符串。http 响应中有一个很重要的部分是状态码,Flask设为200,代表请求已被成功处理。

 

response响应

 

元组形式响应

如果视图函数返回的响应还需要使用不同的状态码,那么可以把数字代码作为第二个返回值,添加到响应文本之后

from flask import Flask

app = Flask(__name__)


# 以元组形式返回响应信息
@app.route("/index")
def index():
    #      响应体        状态码
    return "index page", 400

视图函数返回的响应还可以接受第三个参数,响应头也可以继续放在后面返回,例如:

from flask import Flask

app = Flask(__name__)


# 以元组形式返回响应信息
@app.route("/index")
def index():
    header_dict = {
        "name": "jack",
        "age": 22
    }

    header_list = [("name", "hui"), ("age", 21)]

    #      响应体        状态码    响应头
    return "index page", 400, header_dict
    # return "index page", 400, header_list

但响应头信息要用一个字典或列表包装起来,字典好理解,列表里面则是以元组形式存储响应头信息。这里返回的只是做个例子,真正返回的时候,要合理设置响应头信息,例如

header_dict = {
    "Content-Type": " text/html; charset=utf-8",   # 响应返回的数据类型
    "Set-Cookie": "name=hui; Path=/"        # 响应设置cookie
}
return "index page", 200, header_dict

浏览器开发者工具查看响应信息

Flask response响应的具体使用

切记:以元组形式返回,返回值位置不能够乱

第一个对应响应体
第二个对应状态码
第三个对应响应头

 

make_response函数

如果不想返回由1个、2个或3个值组成的元组,Flask视图函数还可以返回 Response 对象。make_response 函数可接受1个、2个或3个参数(和视图函数的返回值一样),并返回一个Response对象。看看到底如何使用

from flask import Flask, make_response

app = Flask(__name__)

# mk_response 设置响应信息
@app.route("/info")
def info():
    resp = make_response("info page")
    resp.status = "666 ithui"
    resp.headers["name"] = "hui"
    resp.headers["age"] = 21
    return resp

注意:make_response() 对象设置状态码时必须字符串,不要写成了数字

 

返回json格式数据

import json
from flask import Flask, make_response

app = Flask(__name__)


@app.route("/json")
def resp_json():
    data = {
        "name": "hui",
        "age": 21
    }

    json_str = json.dumps(data)
    headers = {"Content-Type": "application/json"}
    return json_str, 200, headers

你可以借助 json 模块进行数据 json化,但一般返回json数据要设置前端返回的数据类型,Flask默认的是text/html,因此我们还需在单独设置响应体内容类型。

由于json格式数据在Web开发中使用频繁,在 Flask 中专门提供了 jsonify() 函数进行 json数据的响应

具体使用如下

from flask import Flask, jsonify

app = Flask(__name__)


@app.route("/json")
def resp_json():
    data = {
        "name": "hui",
        "age": 21
    }
    return jsonify(data)
    # return jsonify(name="jack", age=20)

jsonify()可以接收一个字典,也可以 key-value 形式来构造 json 数据。这样就方便许多

 

其他特殊响应

 

redirect() 重定向

有一种名为重定向的特殊响应类型。这种响应类型没有页面文档,只告诉浏览器一个新地址用以加载新页面

from flask import Flask, redirect

app = Flask(__name__)

# 自己设置重定向信息
@app.route('/baidu')
def red_baidu():
    resp = make_response()
    resp.status = "302"
    resp.headers['Location'] = "http://www.baidu.com"
    return resp


# redirect 响应重定向
@app.route("/csdn")
def red_csdn():
    csdn_url = "https://blog.csdn.net/qq_43629857"
    return redirect(csdn_url)

重定向的经常使用 302 状态码表示,指向的地址由 Location 首部提供。由于使用频繁,Flask 提供了辅助函数 redirect(),用于生成这种响应。

 

abort() 中断

abort()接收一个状态码参数

from flask import Flask, request, abort

app = Flask(__name__)

# abort中断
# http://127.0.0.1:5000/login?name=hui&pwd=123
@app.route("/login", methods=['GET'])
def login():
    name = request.args.get("name")
    pwd = request.args.get("pwd")
    if name != "hui" or pwd != "123":
        abort(404)

    return "登录成功"

一般这个 abort() 函数都会配合错误信息处理装饰器 app.errorhandler() 一起使用,如下:

# 处理404状态错误
@app.errorhandler(404)
def handle_404_err(err):
    return f"404 错误信息 {err}"


# 处理500状态错误
@app.errorhandler(500)
def handle_500_err(err):
    return f"500 服务器错误 {err}"


# abort中断
# http://127.0.0.1:5000/login?name=hui&pwd=123
@app.route("/login", methods=['GET'])
def login():
    name = request.args.get("name")
    pwd = request.args.get("pwd")
    if name != "hui" or pwd != "123":
        abort(404)

    return "登录成功"

 

源代码

源代码已上传到 Gitee HuiDBK/FlaskBasic - 码云 - 开源中国 (gitee.com) ,欢迎大家来访。

到此这篇关于Flask response响应的具体使用的文章就介绍到这了,更多相关Flask response响应内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python抓取网页内容示例分享
Feb 24 Python
利用Psyco提升Python运行速度
Dec 24 Python
Python实现约瑟夫环问题的方法
May 03 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
django框架cookie和session用法实例详解
Dec 10 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
详解Python中下划线的5种含义
You might like
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
浅述python中argsort()函数的实例用法
2017/03/30 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
高三高考决心书
2014/03/11 职场文书
班主任个人工作反思
2014/04/28 职场文书
音乐教师求职信
2014/06/28 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
一份文言文检讨书
2014/09/13 职场文书
工伤事故证明
2014/10/20 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
水电工程师岗位职责
2015/02/13 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
深入理解Vue的数据响应式
2021/05/15 Vue.js
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle