Flask response响应的具体使用
引言
客户端发送 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
浏览器开发者工具查看响应信息
切记:以元组形式返回,返回值位置不能够乱
第一个对应响应体
第二个对应状态码
第三个对应响应头
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 实现Flask中返回图片流给前端展示,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
解决golang处理http response碰到的问题和需要注意的点
这篇文章主要介绍了解决golang处理http response碰到的问题和需要注意的点,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-16- 本篇文章是对C++事件不响应的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-04-25
IIS无法启动提示“服务没有及时响应启动或控制请求”的解决方法[图解]
一直以来Win XP 系统下IIS都用的好好的,一段时间不用,也不知道咋整的,一次想通过Internet 信息服务开启IIS时,发现无法启动IIS并提示服务没有及时响应启动或控制请求...2016-01-27Python如何使用logging为Flask增加logid
这篇文章主要介绍了Python如何使用logging为Flask增加logid,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-30解决IIS中应用程序池提供服务的进程无法响应Ping或进程关闭时间超过了限制
这篇文章主要介绍了解决IIS中应用程序池提供服务的进程无法响应Ping或进程关闭时间超过了限制,需要的朋友可以参考下...2016-07-04- 今天带大家复习python框架的相关知识,文中对flask作了非常详细的介绍,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下...2021-05-25
- 在本篇内容里小编给大家整理的是一篇关于flask开启多线程的具体方法,对此有需求的可以学习参考下。...2020-08-03
- 在某些场景下,我们需要将机器学习或者深度学习模型部署为服务给其它地方调用,本文接下来就讲解使用python的flask部署服务的基本过程。...2021-05-14
iPhone点击屏幕没有响应怎么办 iPhone点击屏幕没有响应解决方法
点击iPhone 屏幕没有响应、有故障,通常是硬件问题,这种情况你需要找售后更换屏幕。但在考虑更换屏幕之前,请先确保问题是不是真的出现在你的物理屏幕上...2022-09-14- 在flask中,想要给前端页面返回数据,必须是Response的对象,本文介绍了Flask response响应的使用,感兴趣的可以了解一下...2021-07-15
关于ThreadLocal对request和response的用法说明
这篇文章主要介绍了关于ThreadLocal对request和response的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-18JavaWeb入门:HttpResponse和HttpRequest详解
这篇文章主要介绍了Django的HttpRequest和HttpResponse对象,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下...2021-07-17浅谈C#中HttpWebRequest与HttpWebResponse的使用方法
本篇文章主要介绍了浅谈C#中HttpWebRequest与HttpWebResponse的使用方法,具有一定的参考价值,有兴趣的可以了解一下。...2020-06-25高效的使用 Response.Redirect解决一些不必要的问题
这篇文章主要介绍了如何高效的使用 Response.Redirect解决一些不必要的问题,需要的朋友可以参考下...2021-09-22HttpWebRequest和HttpWebResponse用法小结
在每个系统出写入报告错误代码(找个合理的理由,比如系统免费升级) -> 自家服务器接收并处理错误报告 -> 反馈用户(解决掉BUG就行,不要太声扬)...2021-09-22python 解决flask 图片在线浏览或者直接下载的问题
今天小编就为大家分享一篇python 解决flask 图片在线浏览或者直接下载的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27在FireFox/IE下Response中文文件名乱码问题解决方案
只是针对没有空格和IE的情况下使用Response.AppendHeader()如果想在FireFox下输出没有编码的文件,并且IE下输出的文件名中空格不为+号,就要多一次判断了,接下来将详细介绍下感兴趣的朋友可以了解下,或许对你有所帮助...2021-09-22- 在本篇文章里小编给大家整理了关于Flask中sqlalchemy模块的实例用法,需要的朋友们可以学习下。...2020-08-02
Python的Flask框架中SERVER_NAME域名项的配置教程
SERVER_NAME项在Flask的路由配置中至关重要,特别是在配置绝对url和子域名的操作中,这里我们就来看一下Python的Flask框架中SERVER_NAME项的配置教程:...2020-06-30