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 ...
随机推荐
- Spring MVC与html页面的交互(以传递json数据为例)
一.导入相jar包 主要包括spring相关jar包和fastjson jar包,具体步骤略. 二.配置相关文件 1.配置web.xml文件 <?xml version="1.0&qu ...
- Linkerd Service Mesh 授权策略(Server & ServerAuthorization)
简介 Server 和 ServerAuthorization 是 Linkerd 中的两种策略资源, 用于控制对 mesh 应用程序的入站访问. 在 linkerd 安装期间,policyContr ...
- 计算机网络 Raw_Socket编程 Ping C语言
计算机网络做了一个附加题,用C语言Raw_Socket实现ping指令. 通过本部的Mooc学习了一下Socket编程,然后成功写了出来orz 先放一下代码: #include <stdio.h ...
- 项目开发中,真的有必要定义VO,BO,PO,DO,DTO这些吗?
存在即是合理的,业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性,都是前辈血淋淋的宝贵经验,为什么不用? 随着现在后端编程标 ...
- Groovy获取Bean两种方式(奇淫技巧操作)
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...
- pipeline option指令
目录 一.简介 二.参数 buildDiscarder checkoutToSubdirectory disableConcurrentBuilds newContainerPerStage retr ...
- Log4j漏洞源码分析
Log4j漏洞源码分析 这几天Log4j的问题消息满天飞,今天我们就一起来看看从源码角度看看这个漏洞是如何产生的. 大家都知道这次问题主要是由于Log4j中提供的jndi的功能. 具体涉及到的入口类是 ...
- MM函数(Excel函数集团)
此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...
- CF764B Timofey and cubes 题解
Content 有一个序列 \(a_1,a_2,a_3,...,a_n\),对于 \(i\in[1,n]\),只要 \(i\leqslant n-i+1\),就把闭区间 \([i,n-i+1]\) 内 ...
- LuoguP4419 [COCI2017-2018#1] Cezar 题解
Content 有一个牌库,有一些点数为 \(1\sim 11\) 的牌,其中除了点数为 \(10\) 的牌有 \(16\) 张之外,其余点数的牌各有四张.现在玩一个游戏,已经拿出了 \(n\) 张牌 ...