Flask response响应的具体使用
作者:忆想不到的晖 发布时间:2021-01-30 06:48:27
目录
引言
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
浏览器开发者工具查看响应信息
切记:以元组形式返回,返回值位置不能够乱
第一个对应响应体
第二个对应状态码
第三个对应响应头
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) ,欢迎大家来访。
来源:https://juejin.cn/post/6982450925759627277
猜你喜欢
- 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境。在创建项目时选择Django项目:第一次建
- 首先我们看公式:这个是要拟合的函数然后我们求出它的损失函数, 注意:这里的n和m均为数据集的长度,写的时候忘了注意,前面的theta0-th
- 文本如图:Python:import sysresult=[]with open('accounts.txt','r
- 缓存的介绍在 * 站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面当一个网
- 一、数据库远程管理技术 对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。曾经在互联网技术和Ja
- 目录前言 字符串都有哪些操作?第一类 判断识别字符串第二类 字符串编辑的操作第三类:字符串跟字节串的互转总结前言今天我们说了字符串
- PyQt中MainWindow, QWidget以及Dialog的区别和选择1. Qt界面分类在Qt Designer设计界面时,首先需要选
- 一直以来,每次调用Ajax方法都需要创建一次 Microsoft.XMLHTTP 对象,今天在使用Ajax技术做一个类似聊天室的
- 本文实例讲述了python简单获取本机计算机名和IP地址的方法。分享给大家供大家参考。具体实现方法如下:方法一:>>> i
- 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是 尝试使用CS
- 目的现有两幅栅格图像,一个是某地区道路栅格图,一个是某地区土地利用类型图,需要将道路叠加到土地利用类型图中,即叠加后,重合的像元值以道路图为
- 进程Process是对各种资源管理的集合,包含对各种资源的调用、内存的管理、网络接口的调用;一个进程Process可以包含多个子进程,启动一
- docx2txt的Github地址docx2txt是基于python的从docx文件中提取文本和图片的库。代码是从python-docx中获
- 阅读上一片:微软建议的ASP性能优化28条守则(1)技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上有时,数据可能太多,无法都缓
- HMAC 算法可用于验证在应用程序之间传递或存储在潜在易受攻击位置的信息的完整性。基本思想是生成与共享密钥组合的实际数据的加密散列。然后,可
- 在进行excel文件读取的时候,我自己设置了部分直接从公式获取单元格的值但是用之前的读取方法进行读取的时候,返回值为空import osim
- 什么是Batch NormalizationBatch Normalization是神经网络中常用的层,解决了很多深度学习中遇到的问题,我们
- pandas.DataFrame为每一列保存一个数据类型dtype。要仅提取(选择)特定数据类型为dtype的列,请使用pandas.Dat
- ①捕捉一个异常捕捉一个异常以用0作为除数会得到ZeroDivisionError异常为例,print(1/0)为例程序的持续执行,不因该异常
- 在写ASP网页时常用的检测代码:服务器现在时间:<% =now %>服务器CPU型号:<%=Request.ServerV