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 ...
随机推荐
- 【简】题解 P5283 [十二省联考2019]异或粽子
传送门:P5283 [十二省联考2019]异或粽子 题目大意: 给一个长度为n的数列,找到异或和为前k大的区间,并求出这些区间的异或和的代数和. QWQ: 考试时想到了前缀异或 想到了对每个数按二进制 ...
- 5、Redis五大基本数据类型——String类型
一.Redis支持数据类型简介 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 二.String类 ...
- Jenkins安全加固
1.jenkins未授权访问 描述 jenkins不当配置可导致未授权访问管理控制台,可以通过脚本命令行执行系统命令.通过该漏洞,可以后台管理服务,通过脚本命令行功能执行系统命令,如反弹shell,w ...
- 如何推翻JAVA的统治地位
"java越来越过份了."php狠狠的说,他转头看着C:"C哥,您可是前辈,java最近砸了我不少场子,你老再不出来管管,我怕他眼里就没有您了啊." C哥吸烟, ...
- Linux 磁盘分区和挂载
目录 Linux 磁盘分区和挂载 windows 下的分区 磁盘管理 相关命令 分区及挂载实现步骤 添加硬盘 分区步骤 步骤 挂载步骤 卸载分区步骤 补充: Linux 磁盘分区和挂载 windows ...
- HTML body体
p br h div span <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- ubuntu上kdump配置:
ubuntu上kdump配置: 1, 安装kdump apt-get install linux-crashdump 2, 调整crashkernel内存大小为768M(默认192M内存太小) 修改 ...
- SpringBoot整合quartz实现动态启动,停止定时任务功能
注意:这个方法当程序重启之后会失效,所以必须将定时任务持久化到数据库,然后程序启动的时候重新把数据库的定时任务加载到quartz中 springboot程序启动初始化代码参考:https://www. ...
- 本原串(hdu 2197)
本原串 题目链接 思路: 反向想将总的个数减去不符合要求的个数.我们枚举n的约数,然后把n平均分,就可以构成不符合要求的串,\(g[i]\)表示循环节长为i约数的个数\(2^i\),我们要求循环节为\ ...
- .NET Core 实现动态代理做AOP(面向切面编程)
1.介绍 1.1 动态代理作用 用动态代理可以做AOP(面向切面编程),进行无入侵式实现自己的扩展业务,调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,比如:日志记录.性能统计.安全控制.事务 ...