响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值。但是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_响应(四)的更多相关文章

  1. Django框架的使用教程--路由-请求-响应[四]

    路由 路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件urls中使用include()包含各个应用的子路由的数据 路由的解析顺序 Django接收到请求后, ...

  2. Kafka设计解析(四)Kafka Consumer设计解析

    转载自 技术世界,原文链接 Kafka设计解析(四)- Kafka Consumer设计解析 目录 一.High Level Consumer 1. Consumer Group 2. High Le ...

  3. Flask - 四剑客 | templates | 配置文件 | 路由系统 | CBV

    Flask框架简介 说明:flask是一个轻量级的web框架,被称为微型框架.只提供了一个高效稳定的核心,其它全部通过扩展来实现.意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩 ...

  4. [转]HTTP请求模型和头信息

    原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...

  5. OnMeasureItem和OnDrawItem的区别和联系

    我们在做程序设计时界面与功能,那个更加吸引用户的兴趣呢?这是一个很难回答的问题.拥有美丽的外观,软件就成功了一半.界面由控件.工具栏.菜单.窗体等元素组成,对他们进行美化就能得到一个美丽的界面. 目前 ...

  6. <jsp:forward>、requestDispatcher和sendRedirect()的区别

    1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上. 2.男人就像蓝牙:只有在你接近时,他才会找上你.当你离开后,他便又去找其他的"设备"了.女人就 ...

  7. WPF学习(6)路由事件

    做过.net开发的朋友对于事件应该都不陌生.追溯历史,事件(Event)首先应用在Com和VB上,它是对在MFC中使用的烦琐的消息机制的一个封装,然后.net又继承了这种事件驱动机制,这种事件也叫.n ...

  8. 2、flask之基础知识点

    本篇导航: 路由系统 视图函数 请求与响应 模版语法 session 蓝图(blueprint).闪现 (flash) 扩展 一.路由系统 1.可传入参数: @app.route('/user/< ...

  9. Spring Cloud 微服务

    https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...

随机推荐

  1. Centos 常用指令

    1.*.tar 用 tar  xvf 解压 2.*.gz 用 gzip  d或者gunzip 解压 3.*.tar.gz和*.tgz 用 tar xzf 解压 4.*.bz2 用 bzip2 d或者用 ...

  2. git push大文件失败(write error: Broken pipe)完美解决

    问题 在使用git push推送大文件(超过了100MB)到GitHub远程仓库时提示异常,异常信息如下: fatal: sha1 file '<stdout>' write error: ...

  3. Innodb Cluster集群部署配置

    目录 一.简介 二.环境声明 三.部署 安装(均操作) 配置(均操作) 开启group_replication(均操作) 启动group_replication 创建集群(在mysql-1执行) 创建 ...

  4. 例外日期(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 日历无论怎么样自定义,只要仍是存在固化规律的,就铁定会坏事,因为人类的历史就是在大规律中掺杂着无数无规律,再由无数无规律凝 ...

  5. LuoguP5139 z小f的函数 题解

    Content 给定 \(T\) 个二次函数 \(y=ax^2+bx+c\),有若干次操作,有一个操作编号 \(p\),保证仅为以下这五种: 操作 \(1\):给定 \(k\),将函数图像向上移动 \ ...

  6. LuoguP2556 [AHOI2002]黑白图像压缩 题解

    Content 题目描述太过于繁琐而无法简化,请前往原题面查看. 数据范围:\(1\leqslant n\leqslant 8\times 10^4\). Solution & Code 一个 ...

  7. CF1025B Weakened Common Divisor 题解

    Content 定义 \(n\) 个数对 \((a_1,b_1),(a_2,b_2),(a_3,b_3),...,(a_n,b_n)\) 的 \(\text{WCD}\) 为能够整除每个数对中至少一个 ...

  8. VC Mirror Driver显示虚拟驱动经典开发

    一个简单的显示驱动实例windows wdk 7600的 mirror(镜像) 显示驱动部分基本流程:Windows 2000 DDK包含了一个例子镜像驱动程序,在 上面3个目录中包括了组件源文件.目 ...

  9. C++ NFS挂载

    挂载NFS 挂载命令 挂载NFS时,常用的命令比如: #将远程目录挂载到本地/home/share目录下 mount -t nfs -o nolock 192.168.1.10:/tmp /home/ ...

  10. AcWing822. 走方格

    题目 给定一个\(n×m\)的方格阵,沿着方格的边线走,从左上角\((0,0)\)开始,每次只能往右或者往下走一个单位距离,问走到右下角\((n,m)\)一共有多少种不同的走法. 输入格式 共一行,包 ...