Flask_响应(四)
响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值。但是Flask Http协议的返回值中通常还会有以下几种不同的方式。
一、return元组
通过return一个元组构造响应信息。
语法如下:
return (显示的信息,状态码,返回报文首部信息) # 括号可缺省
# 以元组的响应
@app.route("/tuple/")
def response_tuple():
# 最简单的响应
# return "响应成功" # 状态码和首部可缺省。状态码缺省时,默认200
# return "响应成功", 200
# return "响应成功", {"token": 666} # 状态码可自定义
# return "响应成功", 666 # 使用非标准http状态码,浏览器中会显示UNKNOWN
# return "响应成功", "666 good" # 设置多个响应首部信息
return "响应成功", {"token": 666, "uid": 777}

二、jsonify函数
jsonify函数是flask封装的函数,用于将数据转换成json字符串,并修改一些headers中的信息。
from flask import jsonify
import json @app.route("/json/")
def response_json():
data = {"name": "zhangsan", "age": 18} # 返回json数据的两种方式 # 1、使用json包转换数据
# json.dumps(dict) 将字典转换为json字符串
# json.loads(json字符串) 将json字符串转为字典
# 1.1 将字典类型数据转换为json字符串
# data_json = json.dumps(data) # {"name": "zhangsan", "age": 18}
# print(type(data_json)) # <class 'str'>
# 1.2 使用元组响应的方式修改Content-Type的值为json,如果不改值为text/html; charset=utf-8
# return data_json, 200, {"Content-Type": "application/json"} # 2、使用flask封装的jsonify函数
# 2.1 数据能以键值对的方式传入
# data_json = jsonify(name="张三", age="18")
# 2.2 数据也能以字典的方式传入
data_json = jsonify(data)
return data_json
三、make_response函数
make_response 函数用于自定义响应信息,与元组相似。
from flask import jsonify, make_response
@app.route("/response/")
def response():
data = {"name": "zhangsan", "age": 18}
# 自定义响应文本
resp = make_response(jsonify(data))
# 自定义响应首部
resp.headers["token"] = "aaaaa"
# 自定义响应状态码
resp.status = "666 status_description"
# 自定义cookie
resp.set_cookie("uid", "888")
return resp

四、abort函数
abort函数通常用来抛出异常,把控制权交给web服务器返回异常,比如:abort(404),传入的状态码只能使用http标准状态码。
演练代码如下:
from flask import abort, Response
@app.route("/login/")
def login():
username = request.args.get("username")
password = request.args.get("password")
if username != "admin" or password != "admin":
# 使用abort函数可以立即终止视图函数的执行,类似于return,但是abort可以返回特定信息给前端
# 1、返回标准的http状态码。比如200、300、400、500,若返回600则报错
abort(403)
# 2、传递响应体信息,但是这与return效果一样,所以abort通常用于返回状态码
# resp = Response("login failed")
# abort(resp)
return "login success"

五、errorhandler装饰器
errorhandler装饰器用于自定义异常响应信息
# 使用errorhandler装饰器自定义异常处理
# 自定义404状态的信息
@app.errorhandler(404)
def error(msg):
return F"访问的页面不存在,{msg}"

附码:
from flask import Flask, request, abort, Response, jsonify, make_response
import json app = Flask(__name__) # 以元组的响应
@app.route("/tuple/")
def response_tuple():
# 最简单的响应
# return "响应成功" # 状态码和首部可缺省。状态码缺省时,默认200
# return "响应成功", 200
# return "响应成功", {"token": 666} # 状态码可自定义
# return "响应成功", 666 # 使用非标准http状态码,浏览器中会显示UNKNOWN
# return "响应成功", "666 good" # 设置多个响应首部信息
return "响应成功", {"token": 666, "uid": 777} # abort函数
@app.route("/login/")
def login():
username = request.args.get("username")
password = request.args.get("password")
if username != "admin" or password != "admin":
# 使用abort函数可以立即终止视图函数的执行,类似于return,但是abort可以返回特定信息给前端
# 1、返回标准的http状态码。比如200、300、400、500,若返回600则报错
abort(403)
# 2、传递响应体信息,但是这与return效果一样,所以abort多用于返回状态码
# resp = Response("login failed")
# abort(resp)
return "login success" # 使用errorhandler装饰器自定义异常处理
# 自定义404状态的信息
@app.errorhandler(404)
def error(msg):
return F"访问的页面不存在,{msg}" # 使用jsonify函数返回json数据
@app.route("/json/")
def response_json():
data = {"name": "zhangsan", "age": 18} # 返回json数据
# 1、使用json包转换数据
# json.dumps(dict) 将字典转换为json字符串
# json.loads(json字符串) 将json字符串转为字典
# 1.1 将字典类型数据转换为json字符串
data_json = json.dumps(data) # {"name": "zhangsan", "age": 18}
# print(type(data_json)) # <class 'str'>
# 1.2 使用元组响应的方式修改Content-Type的值为json,如果不改值为text/html; charset=utf-8
# return data_json, 200, {"Content-Type": "application/json"} # 2、使用flask封装的jsonify函数
# 2.1 数据能以键值对的方式传入
# data_json = jsonify(name="张三", age="18")
# 2.2 数据也能以字典的方式传入
data_json = jsonify(data)
return data_json # 使用 make_response 函数自定义响应信息
@app.route("/response/")
def response():
data = {"name": "zhangsan", "age": 18}
# 自定义响应文本
resp = make_response(jsonify(data))
# 自定义响应首部
resp.headers["token"] = "aaaaa"
# 自定义响应状态码
resp.status = "666 status_description"
# 自定义cookie
resp.set_cookie("uid", "888")
return resp if __name__ == '__main__':
app.run()
Flask_响应(四)的更多相关文章
- Django框架的使用教程--路由-请求-响应[四]
路由 路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件urls中使用include()包含各个应用的子路由的数据 路由的解析顺序 Django接收到请求后, ...
- Kafka设计解析(四)Kafka Consumer设计解析
转载自 技术世界,原文链接 Kafka设计解析(四)- Kafka Consumer设计解析 目录 一.High Level Consumer 1. Consumer Group 2. High Le ...
- Flask - 四剑客 | templates | 配置文件 | 路由系统 | CBV
Flask框架简介 说明:flask是一个轻量级的web框架,被称为微型框架.只提供了一个高效稳定的核心,其它全部通过扩展来实现.意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩 ...
- [转]HTTP请求模型和头信息
原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...
- OnMeasureItem和OnDrawItem的区别和联系
我们在做程序设计时界面与功能,那个更加吸引用户的兴趣呢?这是一个很难回答的问题.拥有美丽的外观,软件就成功了一半.界面由控件.工具栏.菜单.窗体等元素组成,对他们进行美化就能得到一个美丽的界面. 目前 ...
- <jsp:forward>、requestDispatcher和sendRedirect()的区别
1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上. 2.男人就像蓝牙:只有在你接近时,他才会找上你.当你离开后,他便又去找其他的"设备"了.女人就 ...
- WPF学习(6)路由事件
做过.net开发的朋友对于事件应该都不陌生.追溯历史,事件(Event)首先应用在Com和VB上,它是对在MFC中使用的烦琐的消息机制的一个封装,然后.net又继承了这种事件驱动机制,这种事件也叫.n ...
- 2、flask之基础知识点
本篇导航: 路由系统 视图函数 请求与响应 模版语法 session 蓝图(blueprint).闪现 (flash) 扩展 一.路由系统 1.可传入参数: @app.route('/user/< ...
- Spring Cloud 微服务
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...
随机推荐
- maven项目install时忽略执行test
1.在项目所在文件夹根目录使用maven命令打包时: <!-- 不执行单元测试,也不编译测试类 --> mvn install -Dmaven.test.skip=true 或 <! ...
- 令无数程序员加班的 Log4j2 远程执行漏洞复现
前情提要 Apache 存在 Log4j 远程代码执行漏洞,将给相关企业带来哪些影响?还有哪些信息值得关注? 构建maven项目引入Log4j2 编写 pom 文件 <?xml version= ...
- myfs 操作系统课内实验 文件管理系统 Ext2
To 学弟学妹们: 写这个随笔原意是记录一下这个很有趣的实验 ,记录一下写的时候的细节和思路. 要是光是抄这个代码,反而使得这个实验失去了意义. 加油,这个实验收获真的很大. 任务描述: 用一个空白文 ...
- JSP九大内置对象及四个作用域详解
一共有九大内置对象: request.response.out.session.application.pageContext.page.config.exception 内置对象(又叫隐含对象),就 ...
- 前端浅谈---协议相关(TCP连接)
TCP连接 http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体 ...
- 腾讯新闻基于 Flink PipeLine 模式的实践
摘要 :随着社会消费模式以及经济形态的发展变化,将催生新的商业模式.腾讯新闻作为一款集游戏.教育.电商等一体的新闻资讯平台.服务亿万用户,业务应用多.数据量大.加之业务增长.场景更加复杂,业务对实时 ...
- Wireshark基本使用(1)
原文出处: EMC中文支持论坛 按照国际惯例,从最基本的说起. 抓取报文: 下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包.例如,如果想要 ...
- MySQL 分区表,为什么分区键必须是主键的一部分?
随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降. 这个临界值,并不能一概而论,它与硬件能力.具体业务有关. 虽然在很多 MySQ ...
- CF1064A Make a triangle! 题解
Content 有三条长度分别为 \(a,b,c\) 的线段.你可以在一个单位时间内将一条线段的长度增加 \(1\),试求出能使这三条线段组成一个三角形的最短时间. 数据范围:\(1\leqslant ...
- CF1141C Polycarp Restores Permutation 题解
Content 给定一个长度为 \(n-1\) 的序列 \(q\),问你是否能找到一个 \(1\sim n\) 的排列 \(p\),使得 \(\forall i\in[1,n)\),\(q_i=p_{ ...