【python】flask服务端响应与重定向处理

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学
景天的主页:景天科技苑

文章目录

  • flask响应
    • 响应html文本
      • 1.返回字符串
      • 2.可以借助make_response()函数来返回Response对象
      • 3.通过Response返回Response对象
    • 返回JSON数据
      • 1.响应json数据[原生写法]
      • 2.返回json格式数据,返回各种json数据,包括列表,jsonify写法
      • 3.可能遇到的报错处理
    • 响应指定媒体类型文件
    • 重定向
      • 1.重定向到站外地址
      • 2.重定向到站内自己写的视图函数
      • 3.重定向到带有路径参数的视图函数

flask响应

flask默认支持2种响应方式:

数据响应: 默认响应html文本,也可以返回 JSON格式,或其他媒体类型文件

页面响应: 重定向

​ url_for 视图之间的跳转

响应的时候,flask也支持自定义http响应状态码

响应html文本

视图函数返回,即是响应结果

1.返回字符串

return  "123"

在这里插入图片描述

postman请求,看下响应结果
在这里插入图片描述

响应结果默认是html页面
在这里插入图片描述

#如果类型不是response对象,则视图的返回值会被作为response对象的实例参数返回客户端
#以元祖方式返回,第一个参数是html文本,第二个参数是响应状态码,第三个参数是响应头信息,字典方式传参

return "<h1>hello</h1>", 400, {"company": "python"}

浏览器访问,查看响应内容,应状态码,响应头字段
在这里插入图片描述

2.可以借助make_response()函数来返回Response对象

需要导包 make_response

from flask import Flask,make_responsereturn make_response("<h1>hello</h1>", 400, {"study": "flask"})

在这里插入图片描述

浏览器访问
在这里插入图片描述

3.通过Response返回Response对象

需要导包

from flask import Flask,Response

我们看下源码Response参数
在这里插入图片描述
在这里插入图片描述

浏览器访问,查看响应,状态码被修改,带上了响应头
在这里插入图片描述

完整代码:

from flask import Flask,make_response, Responseapp = Flask(__name__)app.config.update({"DEBUG": True
})@app.route("/")
def index():# 默认返回的就是HTML代码,在flask内部调用视图时,得到的返回值会被flask判断类型,#随意返回个字符串,默认响应结果是html页面# return  "123"# 如果类型不是response对象,则视图的返回值会被作为response对象的实例参数返回客户端#以元祖方式返回,第一个参数是html文本,第二个参数是响应状态码,第三个参数是响应头信息,字典方式传参# return "<h1>hello</h1>", 400, {"company": "python"}#可以借助make_response()函数来返回Response对象# return make_response("<h1>hello</h1>", 400, {"study": "flask"})# 通过Response返回Response对象return Response(f"默认首页", 201, {"company": "python"})if __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)

返回JSON数据

1.响应json数据[原生写法]

data = {"name": "小明", "age": 16}
#一定要加上content-type响应头,否则响应的为html页面
return json.dumps(data,ensure_ascii=False), 200, {"Content-Type": "application/json"}

在这里插入图片描述

浏览器访问
在这里插入图片描述

#也可以用Response返回json
return Response(json.dumps(data), 200, {"Content-Type": "application/json"})

在这里插入图片描述
在这里插入图片描述

2.返回json格式数据,返回各种json数据,包括列表,jsonify写法

jsonify返回的是一个Response对象
在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应
需要导包

from flask import Flask, jsonifydata = [{"id": 1, "username": "liulaoshi", "age": 18},{"id": 2, "username": "liulaoshi", "age": 17},{"id": 3, "username": "liulaoshi", "age": 16},{"id": 4, "username": "小明", "age": Decimal(15)},
]
return jsonify(data)

在这里插入图片描述

浏览器访问,jsonify会自动将响应头content-type设为 application/json
在这里插入图片描述

返回json完整代码

from flask import Flask, jsonify, Response
from decimal import Decimalimport jsonapp = Flask(__name__)# app.config.update({
#     "JSONIFY_PRETTYPRINT_REGULAR": False,
#     "SON_AS_ASCII":False
# })@app.route("/")
def index():# """返回json格式数据,返回json字典"""# data = {"name":"xiaoming","age":16}# return data"""响应json数据[原生写法]"""# data = {"name": "小明", "age": 16}#一定要加上content-type响应头,否则响应的为html页面# return json.dumps(data,ensure_ascii=False), 200, {"Content-Type": "application/json"}#也可以用Response返回json# return Response(json.dumps(data), 200, {"Content-Type": "application/json"})"""返回json格式数据,返回各种json数据,包括列表,jsonify写法"""data = [{"id": 1, "username": "liulaoshi", "age": 18},{"id": 2, "username": "liulaoshi", "age": 17},{"id": 3, "username": "liulaoshi", "age": 16},{"id": 4, "username": "小明", "age": Decimal(15)},]return jsonify(data)if __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)

3.可能遇到的报错处理

如果遇到报错 AttributeError: ‘Request’ object has no attribute ‘is_xhr’

解决方法:
将JSONIFY_PRETTYPRINT_REGULAR配置为False就能解决

app = Flask(__name__)app.config.update({"JSONIFY_PRETTYPRINT_REGULAR": False,
})

如果遇到返回的中文编码不对
解决方法:
在flask配置文件配置:JSON_AS_ASCII = False # 支持中文

app.config.update({"SON_AS_ASCII":False
})

综合对比,flask中返回json 数据,都是flask的jsonify方法返回就可以了,直接return只能返回字典格式的json数据。

响应指定媒体类型文件

响应图片给客户端
先看下原图片
在这里插入图片描述

视图函数

@app.route("/img")
def img():"""响应图片格式给客户端"""with open("对称加密.png", "rb") as f:data = f.read()return data, 200, {"Content-Type": "image/png"}  # MIME类型

浏览器访问,能访问到图片数据
在这里插入图片描述

不仅仅可以响应图片类型数据,视频音频,压缩包等等都可以
只要知道该文件的MIME类型就可以
常见的MIME类型网上一查一大堆
在这里插入图片描述

重定向

1.重定向到站外地址

需要导包redirect

from flask import Flask, redirect

redirect参数
在这里插入图片描述

视图函数:

@app.route("/")
def index():"""页面跳转""""""301: 永久重定向,页面已经没有了,站点没有了,永久转移了。302:临时重定向,一般验证失败、访问需要权限的页面进行登录跳转时,都是属于临时跳转。"""# redirect函数就是response对象的页面跳转的封装response = redirect("https://www.baidu.com", 302)return response

redirect的原理,最终还是借助Resonse对象来实现:

# redirect的原理,最终还是借助Resonse对象来实现:
response = "", 302, {"Location": "https://www.baidu.com"}
return response

在这里插入图片描述

完整代码:

from flask import Flask, redirect# 应用实例对象
app = Flask(__name__)@app.route("/")
def index():"""页面跳转""""""301: 永久重定向,页面已经没有了,站点没有了,永久转移了。302:临时重定向,一般验证失败、访问需要权限的页面进行登录跳转时,都是属于临时跳转。"""# redirect函数就是response对象的页面跳转的封装# response = redirect("https://www.baidu.com", 302)# redirect的原理,最终还是借助Resonse对象来实现:response = "", 302, {"Location": "https://www.baidu.com"}return responseif __name__ == '__main__':# 启动项目的web应用程序app.run(host="0.0.0.0", port=5000, debug=True)

2.重定向到站内自己写的视图函数

可以直接填写自己 url 路径

也可以使用 url_for 生成指定视图函数所对应的 url

from flask import url_for

我们判断在查询参数中是否有token,来决定是否需要跳转到登录页面

from flask import Flask, redirect, Response,request
from flask import url_for# 应用实例对象
app = Flask(__name__)@app.route("/user")
def index():if request.args.get("token"):print('token',request.args.get("token"))return "个人中心"# 跳转页面到登录视图中# redirect("url地址") # 控制页面跳转到任意路径下# return redirect("/login")# 跳转页面到其他视图中url = url_for("login")  # url_for("视图名称")print(app.url_map)  # 路由列表,整个flask站点中所有的url地址和视图的映射关系都在这个属性里面print(url)return redirect(url)@app.route("/login")
def login():return "登录视图"if __name__ == '__main__':# 启动项目的web应用程序app.run(host="0.0.0.0", port=5000, debug=True)

浏览器访问,第一次,我们查询参数不带token,页面跳转到了登录视图
http://127.0.0.1:5000/user
在这里插入图片描述

app.url_map 返回整个站点所有的url地址和视图的映射关系
在这里插入图片描述

查询参数带上token,直接进入到个人中心
http://127.0.0.1:5000/user?token=www
在这里插入图片描述

3.重定向到带有路径参数的视图函数

在 url_for 函数中传入参数

from flask import Flask, redirect, url_for# 应用实例对象
app = Flask(__name__)@app.route("/demo/<int:mob>")
def mobile(mob):print(mob)return f"mobile={mob}"@app.route("/sms")
def sms():"""携带路径参数进行站内跳转"""# url_for("视图方法名", 路由路径参数名=路由参数值)url = url_for("mobile", mob=13312345678)print(url)return redirect(url)if __name__ == '__main__':# 启动项目的web应用程序app.run(host="0.0.0.0", port=5000, debug=True)

在浏览器访问http://127.0.0.1:5000/sms,就会跳转到http://127.0.0.1:5000/demo/13312345678

在这里插入图片描述

总结:

综上就是flask服务端各种响应类型和重定向的各种用法,相当全面,感兴趣的朋友一键三连,falsk持续更新中!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL+QT实现矢量和影像的叠加绘制

一、QT下OpenGL框架的初始化 OpenGL的介绍我在这里就没有必要介绍了&#xff0c;那OpenGL和QT的结合在这里就有必要先介绍一下&#xff0c;也就是怎么使用QT下的OpenGL框架。要想使用QT下的OpenGL框架&#xff0c;就必须要子类化QGLWidget&#xff0c;然后实现。 void initia…

Java算法总结之插入排序(详解)

程序代码园发文地址&#xff1a;Java算法总结之插入排序&#xff08;详解&#xff09;-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,Java算法总结之插入排序&#xff08;详解&#xff09;http://www.byqws.com/blog/3148.html?sourcecsdn 插入排…

Oracle数据库删除归档脚本(实例)

Oracle数据库删除归档脚本&#xff08;实例&#xff09; #!/bin/sh applied_days2 cat /dev/null>applied_arch.lst sqlplus -s "/as sysdba" <<EOF>/dev/null set feedback off set pages 0 set head off set timing off set echo off spool applied_a…

IDEA 多个git仓库项目放一个窗口

1、多个项目先通过新建module或者CtrlAltShiftS 添加module引入 2、重点是右下角有时候git 分支视图只有一个module的Repositories。这时候需要去设置把多个git仓库添加到同一个窗口才能方便提交代码。 3、如果Directory Mappings已经有相关项目配置&#xff0c;但是灰色的&…

常量与变量

1 常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型,如12、0、-3为整型常量&#xff0c;4.6、-1.23为实型常量&#xff0c;a、d为字符常量。常量一般从其字面形式即可判别。这种常量称为字面常量或直接常量。 也可以用一个标识符代表一个常…

【NBUOJ刷题笔记】递推_递归+分治策略1

0. 前言 PS&#xff1a;本人并不是集训队的成员&#xff0c;因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识&#xff0c;另一方面是给NBU学弟学妹们参考解题思路&#xff08;切勿直接搬运抄袭提交作业&#xff01;&#xff01;&#xff01;&#xff09;最后&…

【消息队列开发】 虚拟主机设计——操作绑定

文章目录 &#x1f343;前言&#x1f332;添加绑定&#x1f333;删除绑定⭕总结 &#x1f343;前言 本次开发任务&#xff1a; 实现对绑定的添加与绑定 &#x1f332;添加绑定 对于绑定的操作相较于前面对交换机和队列的操作就会麻烦一点了 我们分为以下七步来实现&#x…

【xr806开发板使用】连接wifi例程实现

##开发环境 win10 WSL ##1、环境配置 参考&#xff1a;https://aijishu.com/a/1060000000287513 首先下载安装wsl 和ubuntu https://docs.microsoft.com/zh-cn/windows/wsl/install &#xff08;1&#xff09;安装repo&#xff1a; 创建repo安装目录&#xff1a; mkdir ~/…

AI预测福彩3D第15弹【2024年3月21日预测--新算法重新开始计算第12次测试】

今天继续对第一套算法进行测试&#xff0c;废话不多说&#xff0c;直接上结果。 最终&#xff0c;经过研判分析&#xff0c;2024年3月21日福彩3D的七码预测结果如下&#xff1a; 百位&#xff1a;5 4 7 1 2 0 6 十位&#xff1a;3 5 1 2 0 4 6(9换6) 个位&#xff1a;2 0 1 3 4…

修改网站源码,给电子商城的商品添加图片时商品id为0的原因

修改网站源码&#xff0c;给电子商城的商品添加图片时商品id为0的原因。花了几个小时查找原因。后来&#xff0c;由于PictureControl.class.php是复制CourseControl.class.php而来&#xff0c;于是对比了这两个文件&#xff0c;在CourseControl.class.php找到了不一样的关键几条…

【算法】差分算法(空调)

可用于求一个数组要变为另一个数组最少要改变多少次的次数 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些&#xff0c;而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏&#xff0c;编号为 1…N&#xff0c;每个牛栏里有一头…

【Linux系列】计算机系统中的架构与发行版:理解与区分

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

一文读懂MES和ERP的区别

MES&#xff08;Manufacturing Execution System&#xff09;系统是制造执行系统&#xff0c;位于上层的计划管理系统与生产过程的直接工业控制系统之间&#xff0c;是面向车间层的管理信息系统&#xff0c;能够对整个车间制造过程进行优化&#xff0c;实时收集生产过程中的数据…

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a;"123" 、"132" 、"213" 、"231"、"312"、…

数字化转型:传统行业的新出路?

近年来&#xff0c;数字化转型已成为各行各业的热议话题。许多传统行业正面临着巨大的挑战&#xff0c;例如市场竞争加剧、成本上升、利润率下降等。数字化转型被视为传统行业破局的关键。那么&#xff0c;数字化转型究竟是不是传统行业的新出路呢&#xff1f; 传统行业面临的挑…

Qt 坐标位置转换

Qt 坐标位置转换 文章目录 Qt 坐标位置转换常见的位置坐标转换Qt窗体中常用坐标的区别与获取途径当前光标相对于屏幕的绝对位置当前光标相对于当前窗口的位置鼠标事件发生的位置窗体的位置判断鼠标光标是否悬浮在某个子控件上 从事Qt快一年了 &#xff0c;在做坐标转换的时候容…

OpenCV4.9.0在Android 开发简介

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 下一篇&#xff1a;暂无 引言&#xff1a; OpenCV是一个跨平台计算机视觉库&#xff0c;广泛用于图像处理、计算机视觉和机器学习等领域…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生、…

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的…

群发短信后的实际效果统计分析

群发短信后的实际效果统计分析是评估短信营销效果的关键环节&#xff0c;有助于企业了解短信发送的效果&#xff0c;并据此优化营销策略。以下是对群发短信实际效果统计分析的详细探讨&#xff1a; 首先&#xff0c;企业需要关注短信的发送成功率。这包括短信是否成功发送至目标…