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


猜你喜欢
- 使用Python IDLE时发现并没有清空当前窗口的快捷键,也没有像 clear 这样的命令,使用非常不便。新建一个 ClearWindow
- 本来想着做一个将图片识别为文字的小功能,本想到Google上面第一页全是各种收费平台的广告。这些平台提供的基本都是让我们通过调用相关的三方接
- 由于想要使用pycharm连接Window子系统Ubuntu进行开发,找了很多教程都不够详细,花了点儿时间,最后配置成功。将pycharm连
- 类的定义# class是定义类的关键字,ClassName为类的名称class ClassName:# 在这里写其他内容passclass
- NumPy 支持的几类矩阵乘法也很重要。元素级乘法你已看过了一些元素级乘法。你可以使用 multiply 函数或 * 运算符来实现。回顾一下
- 以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,
- 如果没有了解栅格系统是什么,建议看完这篇文章以后再回来。其实有很种 CSS 写法实现栅格系统,很多 CSS 库也都会提供类似的栅格系统实现(
- 没办法,只能自己研究,经过大概一天时间吧,还是搞好了,写个总结。出现这种问题,解决方法大概有这几种:1.权限不够,导致弹出空吧提示框。(直接
- MySQL 查询合并如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。un
- 本篇文章主要内容代理类主要功能是将一个类实例的属性访问和控制代理到代码内部另外一个实例类,将想对外公布的属性的访问和控制权交给代理类来操作,
- 1.设置mysql允许外部连接访问(授权):grant all privileges on *.* to root@'%'
- 一。存储过程的创建和使用1.创建程序包,并在程序中创建存储过程create or replace PACKAG
- 前言Python 是一种面向对象的、解释型的、通用的、开源的脚本编程语言。现在市面上 Python 非常的流行,主要是因为它简单易用,学习成
- 1 简介费老师我在几年前写过的一篇文章(https://www.jb51.net/article/243348.htm)中,介绍过tqdm这
- 在我们使用pyCharm编辑器中有一些方法或者库都是需要我们自行安装,下面就来安装一波安装第三方库有俩个方法使用pip命令来进行安装(pip
- 一、IDEA连接MySQL数据库(一)首先新建普通Java项目(二)连接数据库1、点击右侧DataBase2、点击加号,找到MySQL,添加
- <?php/*======================================事务处理==================
- 1.配置需要python3.7,Chrome或者Edeg浏览器,Chrome驱动或者Edge驱动#需要配置selenium库,baidu-a
- mysql 8.0.25 解压版安装教程,供大家参考,具体内容如下1、下载(官方推荐的是下载安装版本,但是解压版更便捷),下载地址2、解压,
- 流程:模拟登录→获取Html页面→正则解析所有符合条件的行→逐一将符合条件的行的所有列存入到CSVData[]临时变量中→写入到CSV文件中