2023.12.6 关于flask中的route、render_template、redirect的关系问题

2023.12.6 关于flask中的route、render_template、redirect的关系问题

之前对于route、render_template、redirect三者的关系还有一些模糊,测试了一个案例后就比较清晰了,简单来说就是路径、模板和重定向,三者相对独立,只是一般命名的时候都用同样的名称,容易造成误解。

注意:不同路径下可以渲染同一个模板!

在 Flask 中,route、render_templateredirect 是用于构建 Web 应用程序的不同功能。
route 是一个装饰器,用于在 Flask 应用中定义路由。通过 route 装饰器,可以将 URL 和对应的处理函数绑定起来。例如,@app.route('/') 可以将根路径绑定到一个处理函数上。

render_template 是一个函数,用于在 Flask 应用中渲染模板文件。它接受一个模板文件的名称作为参数,并且可以传递一些数据给模板文件,以便在生成 HTML 响应时进行渲染。通常,在处理函数中使用 render_template 来生成动态的网页内容。

注意:可以在同一个路径下渲染不同的模板!

redirect 是一个函数,用于在 Flask 应用中执行重定向操作。它接受一个 URL 作为参数,并将用户请求重定向到该 URL 对应的页面。通常,您可以在处理函数中使用 redirect 来将用户重定向到其他页面,例如登录成功后跳转到主页。

注意:重定向定向到路径而不是模板!

简而言之,route 用于定义路由,将 URL 和处理函数绑定;render_template 用于渲染模板文件,生成动态的网页内容;而 redirect 用于执行重定向操作,将用户导航到其他页面。

下面有两种写法,程序齐全的时候运行,功能是一样的,但是细节会有区别。测试后可以有比较深的体会。

方法一

@bindex.route('/home')
def home():if 'username' in session:username = session['username']role = session['role']if role == 'admin':return render_template('home_admin.html', username=username)else:return render_template('home_user.html', username=username)else:return redirect(url_for('account.login'))

方法二:

@account.route('/home')
def home():if 'username' in session:username = session['username']role = session['role']if role == 'admin':return redirect(url_for('bindex.home_admin'))else:return redirect(url_for('bindex.home_user'))else:return redirect(url_for('account.login'))

方法一和方法二的区别在于:
(1)方法一的url仅会显示/home,而非/home_admin或者/home_user,相当于用/home遮盖住了/home_admin或者/home_user,方法二相反。
(2)两者均可以在/home_admin或者/home_user模板上再次进行get/post操作,实现效果相同。

综上,方法一可以隐藏后端可能存在的URL,在安全性上会略好于方法二;方法二更适合做比较复杂的多种权限管理系统,可以通过蓝图的形式将多种权限进行独立划分。方法一的优点是代码重复量少,但是耦合严重。可以视实际需求进行选择。

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

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

相关文章

我的创作纪念日-第四年

机缘 不知不觉,CSDN 写博客已经四年了,也伴随了我读研读博的绝大多数时间。最多的时候,还是想记录下自己所走过的路程吧,然后留给后人一点经验借鉴。 实战项目中的经验分享   应该只分享过一篇博文:基于Jetson nan…

如何在 1 天内将网站打造为手机app

为您的网站提供移动应用程序的重要性怎么强调都不为过。随着用户越来越依赖智能手机和平板电脑进行在线活动,将您的网站转变为移动手机app可以显着增强用户体验、提高参与度并扩大您的在线影响力。在这篇博客中,我们将探讨如何快速有效地将网站制作成移动…

【Let‘s Encrypt SSL】使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书

安装acme.sh 安装 acme.sh 并设置邮箱用来接受重要通知,如证书快过期未更新通知 curl https://get.acme.sh | sh -s emailmyexample.com执行命令后几秒就安装好了,如果半天没有反应请 CtrlC 后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下&#xf…

windows 10多用户同时远程登陆配置【笔记】

系统环境&多用户访问情况: 1、【win】【R】键入【gpedit.msc】 2、依次选择【计算机配置】→ 【管理模板】 → 【Windows组件】 → 【远程桌面服务】 → 【远程桌面会话主机】 →【连接】 2.1、右键 【允许用户通过使用远程桌面服务进行远程连接】 编辑 …

C++初阶-vector类的模拟实现

vector类的模拟实现 一、经典的vector类问题1.1 前期准备 二、vector的默认成员函数2.1 构造函数2.1.1 无参构造2.1.2 构造具有n个对象值为val的容器(数据类型为模板类型T)2.1.3 拷贝构造 2.2 swap(operator需要用)2.3 复制重载op…

volatile 系列之指令重排序导致的可见性问题

什么是指令重排序呢?为了更加直观地理解,老司机还是通过一个案例来说明 public class MemoryReorderingExample {private static int x0,y0:private static int a0,b0;public static void main(String[] args) throws InterruptedException {int i0;while(true){…

排序算法之一:直接插入排序

1.基本思想 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 实际中我们玩扑克牌时,就用…

【UML】组件图中的供接口和需接口与面向对象中的接口

UML(统一建模语言)组件图中的“供接口”(Provided Interface)和“需接口”(Required Interface)与面向对象编程中的接口概念有关联,但它们在应用上有所区别。 下面解释两者的关系: …

NCNN 源码学习【一】:学习顺序

最近一段时间一直在做模型部署的工作,主要是利用NCNN部署到安卓端,跟着网上的博客和开源项目,做了很多工作,也学习到很多东西,但是对于NCNN的源码,并没有仔细的研究过,对我来说,仿佛…

C++共享和保护——(2)生存期

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命如同寓言,其价值不在于…

改进YOLOv8注意力系列二:结合CBAM、Coordinate Attention、deformable_LKA_Attention可变形大核注意力

改进YOLOv8注意力系列二:结合ACmix、Biformer、BAM注意力机制 代码CBAM注意力Coordinate Attention坐标注意力deformable_LKA_Attention可变形大核注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代…

C#面试题

基本概念 装箱和拆箱 装箱的过程,是将 值类型 转换为 引用类型 的过程; 拆箱则是将引用类型转换为值类型。 int val 100; object obj val; //装箱 int num (int) obj; //拆箱 委托(delegate) 委托(Delegate) 是存有对某个…

【算法每日一练]-结构优化(保姆级教程 篇6 分块,倍增)#HDU4417超级马里奥 #poj2019玉米田 #POJ3368频繁值

今天知识点: 区间统计不超过h的值; 查询二维区间的极差; 求区间最频繁数; 目录 HDU4417:超级马里奥 思路: poj2019:玉米田 思路: POJ3368:频繁值 思路: HDU4417&#xff1…

C语言之文件操作(上)

C语言之文件操作(上) 文章目录 C语言之文件操作(上)1. 什么是⽂件?1.1 程序⽂件1.2 数据⽂件1.3 ⽂件名 2. ⼆进制⽂件和⽂本⽂件3. ⽂件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 4. ⽂件指针5. 文件的打开与关…

【广州华锐视点】物流数字孪生三维可视化系统打造更高效、智能的物流管理体验

在当今快速发展的物流行业中,传统的管理和监控方法往往难以满足复杂运营的需求。为了解决这个问题,广州华锐互动提供物流数字孪生三维可视化系统定制开发服务,打造更为高效、智能的物流管理体验。 物流数字孪生三维可视化系统是一种基于虚拟现…

虚拟现实三维电子沙盘数字沙盘开发教程第5课

虚拟现实三维电子沙盘数字沙盘无人机倾斜摄影全景建模开发教程第5课 设置system.ini 如下内容 Server122.112.229.220 userGisTest Passwordchinamtouch.com 该数据库中只提供 成都市火车南站附近的数据请注意,104.0648,30.61658 在鼠标指定的位置增加自己的UI对象&…

【Hive】——DDL(CREATE TABLE)

1 CREATE TABLE 建表语法 2 Hive 数据类型 2.1 原生数据类型 2.2 复杂数据类型 2.3 Hive 隐式转换 2.4 Hive 显式转换 2.5 注意 3 SerDe机制 3.1 读写文件机制 3.2 SerDe相关语法 3.2.1 指定序列化类(ROW FORMAT SERDE ‘’) 3.2.2 指定分隔符&#xff0…

深入理解Dubbo-8.Dubbo的失败重试设计

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

鸿蒙(HarmonyOS)北向开发项目编译问题汇总

运行Hello World Hello World 工程可以运行在模拟器中,或者运行在真机设备中。本示例先以选择将 Hello World 工程运行在模拟器中进行说明,如果选择运行在真机设备中,需要先对工程进行签名,然后才能运行在真机设备中。 DevEco S…

[数据集][目标检测]芝麻杂草目标检测数据集VOC+YOLO格式1300张2类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1300 标注数量(xml文件个数):1300 标注数量(txt文件个数):1300 标注类别数&a…