【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.rhkb.cn/news/283640.html

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

相关文章

Spring单元测试+Mockito

一&#xff0c;背景 单元测试基本上是开发逃不过的一个工作内容&#xff0c;虽然往往因为过于无聊&#xff0c;或者过于麻烦&#xff0c;而停止于项目的迭代之中&#xff0c;不了了之了。其实不是开发们懒&#xff0c;而是上头要求的测试覆盖率高&#xff0c;但是又没有好用的…

大模型+强化学习_精典方法_RLHF

英文名称&#xff1a;Deep Reinforcement Learning from Human Preferences 中文名称&#xff1a;从人类偏好中进行深度强化学习 链接&#xff1a;https://arxiv.org/abs/1706.03741 作者&#xff1a;Paul F Christiano, Jan Leike, Tom B Brown... 机构&#xff1a;OpenAI, …

数据结构从入门到精通——快速排序

快速排序 前言一、快速排序的基本思想常见方式通用模块 二、快速排序的特性总结三、三种快速排序的动画展示四、hoare版本快速排序的代码展示普通版本优化版本为什么要优化快速排序代码三数取中法优化代码 五、挖坑法快速排序的代码展示六、前后指针快速排序的代码展示七、非递…

英特尔生态的深度学习科研环境配置-A770为例

之前发过在Intel A770 GPU安装oneAPI的教程&#xff0c;但那个方法是用于WSL上。总所周知&#xff0c;在WSL使用显卡会有性能损失的。而当初买这台机器的时候我不在场&#xff0c;所以我这几天刚好有空把机器给重装成Ubuntu了。本篇不限于安装oneAPI&#xff0c;因为在英特尔的…

什么是PLC物联网关?PLC物联网关有哪些功能?

在数字化浪潮的推动下&#xff0c;工业物联网&#xff08;IIoT&#xff09;正逐步成为推动制造业智能化转型的关键力量。而在这一变革中&#xff0c;PLC物联网关扮演着至关重要的角色。今天&#xff0c;就让我们一起走进PLC物联网关的世界&#xff0c;了解它的定义、功能&#…

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能&#xff1a;它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览…

机器学习 - 准备数据

“Data” in machine learning can be almost anything you can imagine. A table of big Excel spreadsheet, images, videos, audio files, text and more. 机器学习其实可以分为两部分 将不管是什么data&#xff0c;都转成numbers.挑选或者建立一个模型来学习这些numbers …

js模版字符串-标签模版

模版字符串 js模版字符串使用来创建模版字符串字面量&#xff0c;例如 const name "yu" console.log(hello ${name})很多人都知道。但是其实我们可以定义标签函数来自定义返回结果。 标签函数 带标签的模板是模板字面量的一种更高级的形式&#xff0c;它允许你使…

阿里云ecs服务器配置反向代理上传图片

本文所有软件地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/12OSFilS-HNsHeXTOM47iaA 提取码&#xff1a;dqph 为什么要使用阿里云服务器&#xff1f; 项目想让别人通过外网进行访问就需要部署到我们的服务器当中 1.国内知名的服务器介绍 国内比较知名的一些…

什么是行业垂直类媒体?有哪些?怎么邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 行业垂直类媒体是聚焦于特定行业或领域的媒体平台。 行业垂直类媒体不同于主流媒体&#xff0c;它们专注于提供与某个特定领域相关的深入内容和服务&#xff0c;例如商业新闻、旅游、数字…

seleniumUI自动化实例(登录CSDN页面)

今天分享一个CSDN登录模块的登录场景 1.配置文件 CSDNconf.py&#xff1a; from selenium import webdriver options webdriver.ChromeOptions() options.binary_location r"D:\Program Files\360\360se6\Application\360se.exe" # 360浏览器安装地址 driver w…

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信…

MyBatis3源码深度解析(十七)MyBatis缓存(一)一级缓存和二级缓存的实现原理

文章目录 前言第六章 MyBatis缓存6.1 MyBatis缓存实现类6.2 MyBatis一级缓存实现原理6.2.1 一级缓存在查询时的使用6.2.2 一级缓存在更新时的清空 6.3 MyBatis二级缓存的实现原理6.3.1 实现的二级缓存的Executor类型6.3.2 二级缓存在查询时使用6.3.3 二级缓存在更新时清空 前言…

Nginx 的安装、启动和关闭

文章目录 一、背景说明二、Nginx 的安装2.1、依赖的安装2.2、Nginx 安装2.3、验证安装 三、启动 Nginx3.1、普通启动3.2、如何判断nginx已启动3.3、通过配置启动3.4、设置开机启动 四、关闭 Nginx4.1、优雅地关闭4.2、快速关闭4.3、只关闭主进程4.4、使用nginx关闭服务 五、重启…

计算机网络:数据交换方式

计算机网络&#xff1a;数据交换方式 电路交换分组交换报文交换传输对比 本博客介绍计算机之间数据交换的三种方式&#xff0c;分别是电路交换、分组交换以及报文交换。 电路交换 我们首先来看电路交换&#xff0c;在电话问世后不久&#xff0c;人们就发现要让所有的电话机都…

Springboot-软件授权License

无意中看到了一个简单方便的授权方式&#xff0c;只需几步就可集成到boot项目中。 先上地址&#xff1a;smart-license: 保护个人与企业的软件作品权益&#xff0c;降低盗版造成的损失。PS&#xff1a;因个人精力有限&#xff0c;不再提供该项目的咨询答疑服务。 Smart-licen…

【小米汽车SU7实测】 小米汽车su7到底行不行?小米新能源轿车体验感怎么样?

小米汽车SU7是小米汽车的首款车型&#xff0c;定位“C级高性能生态科技轿车”&#xff0c;也是小米迈入新能源赛道的首次成果落地。 首先&#xff0c;让我们来谈谈它的性能。试驾过程中&#xff0c;小米SU7展现出了惊人的加速能力&#xff0c;0-100km/h加速仅需2.78秒&#xf…

pytest全局配置+前后只固件配置

pytest全局配置前后只固件配置 通过读取pytest.ini配置文件运行通过读取pytest.ini配置文件运行无条件跳过pytest.initest_mashang.pyrun.py 有条件跳过test_mashang.py pytest框架实现的一些前后置&#xff08;固件、夹具&#xff09;处理方法一&#xff08;封装&#xff09;方…

Kafka总结问题

Kafka Kafka Kafka Kafka的核心概念/ 结构 topoic Topic 被称为主题&#xff0c;在 kafka 中&#xff0c;使用一个类别属性来划分消息的所属类&#xff0c;划分消息的这个类称为 topic。topic 相当于消息的分配标签&#xff0c;是一个逻辑概念。主题好比是数据库的表&#xff0…

C++进阶之路---C++11相关特性 | 左值引用 | 右值引用 | 完美转发

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之…