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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
python获取array中指定元素的示例
Nov 26 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Python实现自动整理文件的脚本
Dec 17 Python
python FTP编程基础入门
Feb 27 Python
python not运算符的实例用法
Jun 30 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
详解Python中下划线的5种含义
You might like
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
深入Nginx + PHP 缓存详解
2013/07/11 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中__call__用法实例
2014/08/29 Python
详解Django框架中的视图级缓存
2015/07/23 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
mac系统安装Python3初体验
2018/01/02 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
司法局2014法制宣传日活动总结
2014/11/01 职场文书
孔庙导游词
2015/02/04 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang