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 ...
随机推荐
- Kafaka相关命令
开启zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh start 关闭zookeeper命令(备注:先进入zookeeper的bin目录) ./zkSe ...
- html如何让input number类型的标签不产生上下加减的按钮(转)
添加css代码: <style> input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit- ...
- SpringMvc分析
1.用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理 2.前端控制器(DispatcherServlet)请求处理器映射器(Handle ...
- 关于finally中的语句和try中的return之间的执行顺序
首先是第一种情况: 我们这里由于程序只是单一的,所以后面的代码只有主题部分: Public class test{ Public static void main(String[] args){ Sy ...
- ctypes与numpy.ctypeslib的使用
numpy ctypeslib 与 ctypes接口使用说明 作者:elfin 目录 一.numpy.ctypeslib使用说明 1.1 准备好一个C++计算文件 1.2 ctypeslib主要的五个 ...
- .net core Winform 添加DI和读取配置、添加log
首先新建配置类 public class CaptureOption { /// <summary> /// 是否自启 /// </summary> public bool A ...
- 代码仓库gogs的基本配置使用
目录 一.基本功能介绍 主板说明 页面说明 用户设置 二.仓库 新建仓库 迁移仓库 仓库介绍 三.组织和团队 创建新组织 创建团队 一.基本功能介绍 主板说明 图中1表示自己个人账户下的仓库(所有权属 ...
- Memcached 状态机分析
worker线程拿到了这个连接之后,就应该是分配给这个连接一个结构体,包括这个连接所有的状态,都写buf等,这个结构体就是conn,然后这个worker线程会在它自己的event_base加入对这个新 ...
- 在React中使用 react-router-dom 编程式路由导航的正确姿势【含V5.x、V6.x】
## react-router-dom 编程式路由导航 (v5) ###### 1.push跳转+携带params参数 ```jsx props.history.push(`/b/child1/${i ...
- LuoguP5139 z小f的函数 题解
Content 给定 \(T\) 个二次函数 \(y=ax^2+bx+c\),有若干次操作,有一个操作编号 \(p\),保证仅为以下这五种: 操作 \(1\):给定 \(k\),将函数图像向上移动 \ ...