Flask 路由跳转机制:url_for生成动态URL、redirect页面重定向

在 Flask 开发中,url_for()redirect() 是实现路由跳转逻辑的核心工具。

url_for()负责安全、灵活地生成 URL。
redirect()负责发起重定向响应。


1、url_for():生成URL

url_for(endpoint, **values) 是 Flask 提供的 URL 构造工具,可根据路由端点(即视图函数名)动态生成对应路径

那么这里的“路由端点”是哪来的呢?
通过“路由装饰器”生成的Rule对象,保存在app.url_map里的。
关于Flask路由装饰器,可以看这一篇:Flask 路由装饰器:从 URL 到视图函数的优雅映射

1.1、基本语法

url_for(endpoint, **values)
  • endpoint:视图函数名(字符串)
  • **values:动态参数、查询参数、特殊参数(如 _external, _anchor

1.2、使用方式

1.2.1、生成静态路径(无参数)

避免硬编码 URL 路径,提高代码维护性:

url_for('home')  # -> '/home'

1.2.2、绑定一个动态参数

支持绑定动态路由参数,灵活生成对应路径:

url_for('profile', username='alice')  # -> '/user/alice'

1.2.3、绑定多个动态参数或附加查询参数

支持附加查询参数,方便传递额外信息:

url_for('profile', username='alice', page=2)  # -> '/user/alice?page=2'

1.2.4、生成绝对路径(带域名)

适合需要外部访问或邮件链接场景,生成完整 URL:

url_for('profile', username='alice', _external=True)  # -> 'http://localhost/user/alice'

1.2.5、带锚点(fragment)

支持 URL 片段定位,增强用户体验:

url_for('home', _anchor='top')  # -> '/home#top'

2、redirect():页面重定向

redirect(location, code=302) 是 Flask 提供的重定向函数,用于生成重定向响应,提示客户端跳转到新的 URL。

2.1、基本语法

redirect(location, code=302)
  • location:目标 URL
    • 可以是相对路径(如 /home)、绝对路径(如 http://example.com),或通过 url_for() 构造而得。
  • code:HTTP 状态码,默认是 302,表示临时重定向。
    • 302默认):临时重定向,常用于普通页面跳转。
      浏览器通常会将 POST 请求在接收到 302 后,转换为 GET 请求重新发起,这种行为是为了避免表单重复提交,属于浏览器的历史兼容实现。
    • 301永久重定向,适用于 URL 变更。
    • 303:明确告知浏览器用 GET 请求访问重定向目标,适合 POST 请求后的跳转,规范避免了 302 状态下浏览器不一致的行为。
    • 307保持原请求方法(如 POST 仍为 POST),用于需要严格保留请求语义的场景(如 API 调用)。

HTTP 状态码 303307 都是在 HTTP/1.1 标准(RFC 2616) 中首次引入的,用于补充和细化原本模糊不清的 302 重定向行为。

2.2、示例

from flask import redirect@app.route('/old')
def old():return redirect('/new')  # 临时重定向到 /new,默认状态码 302@app.route('/submit', methods=['POST'])
def submit():# 处理表单后用 303 重定向,确保浏览器用 GET 请求跳转return redirect(url_for('success'), code=303)@app.route('/external')
def external():return redirect('https://example.com', code=301)  # 永久重定向到外部链接

3、组合使用:优雅地跳转逻辑

以下是一个实际场景:主页判断用户是否已登录,并进行相应跳转。

@app.route('/')
def index():if 'username' in session:return redirect(url_for('profile'))  # 登录后跳转到个人页面return redirect(url_for('login'))

这个例子体现了 url_forredirect 的协同作用:

  • url_for('profile')url_for('login') 提供灵活、安全的 URL 构造。
  • redirect(...) 返回重定向响应,引导客户端跳转。
  • 当路由或参数发生变动时,无需修改跳转逻辑,只需调整对应的视图函数即可。

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

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

相关文章

华为OD机试真题——构成正方形的数量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《构成…

FFMPEG-AAC编码

一、流程图 二、代码解释 avcodec_find_encoder: 根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3: 为AVCodecContext分配内存。()avcodec_open2: 打开编码器。avcodec_send_frame: 将AVFrame⾮压缩数据给编码器。avcodec_receive_packet: 获取到编码后的…

RPC 协议详解、案例分析与应用场景

一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务,其实现过程涉及多个关键组件与流程。 (一)核心组件 客户端(Client):发起远程过程调用的一方,它并不关心调…

Docker基础 -- Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南

Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南 作者: (填写作者) 发布日期: 2025‑05‑26 1 背景与目标 在企业内网(需要代理)环境下,我们需要一套可靠、可复用的 Ubuntu 22.04 交叉编…

【ISP算法精粹】ISP算法管线的预处理算法有哪些?

1. ISP预处理算法有哪些? 在图像信号处理(ISP)流程中,预处理阶段主要针对图像传感器(如CMOS/CCD)输出的原始图像数据(通常为拜耳格式的RAW图像)进行初步处理,以校正硬件…

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

视频存储开源方案

项目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工况数据(Drive Cycle)用于车辆仿真

典型城市工况数据(Drive Cycle)用于车辆仿真 在车辆仿真过程中,使用典型的城市工况数据(Drive Cycle)是评估车辆性能、能耗和排放的关键步骤。以下是一些常用的典型城市工况数据及其来源,这些数据可以帮助…

深度解析新能源汽车结构与工作原理

一、核心系统架构 新能源汽车主要由三大核心系统构成: 电力驱动系统:包含永磁同步电机、电机控制器(MCU)及减速器,采用三合一集成设计实现轻量化。永磁同步电机通过电磁感应原理将电能转化为机械能,其效率可…

跳板问题(贪心算法+细节思考)

首先直接看题&#xff1a; 这题直接贪心其实问题不大&#xff1a; 下面先展示我的一个错误代码&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查询PostgreSQL数据库中剩余的磁盘空间&#xff0c;可以使用以下方法&#xff1a; 使用SQL查询函数&#xff1a; 可以通过pg_size_pretty函数来查看数据库的总磁盘使用情况&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球前言高斯函数一维高斯多维高斯 椭球基本定义一般二次形式 3D高斯椭球3D高斯与椭球的关系各向同性(Isotropic)和…

unix的定时任务和quartz和spring schedule的cron表达式区别

一、核心区别对比表 对比项Unix CrontabQuartzSpring Scheduled表达式位数5 位6 位或 7 位6 位秒级支持❌ 不支持&#xff08;最小单位是分钟&#xff09;✅ 支持✅ 支持年字段❌ 无✅ 可选第7位❌ 不支持特殊符号支持较少&#xff08;如 *, ,, -, /&#xff09;很丰富和 Quar…

C++基础算法————递推

C++递推:初学者的进阶之旅 一、引言 在计算机编程的世界里,C++ 以其强大的功能和高效性受到众多开发者的青睐。递推作为一种重要的编程思想,在解决各种复杂问题时发挥着关键作用。对于初学者来说,理解并掌握递推不仅可以提升编程能力,还能培养逻辑思维和问题解决能力。本…

QTabWidget垂直TabBar的图标和文本水平显示

一般情况下,我们可以通过QTabWidget的setTabPosition方法来设置TabBar的位置,比如设置在左边 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此时图标和文字都是垂直的,如果让它们水平显示呢? 一.效果 二.原理 在绘制TabBar时,顺时针旋转90度 三.实现 …

HCIP-AI培养计划,成为新时代AI解决方案架构高级工程师

01 华为认证是什么&#xff1f; 华为认证&#xff08;Huawei Certification&#xff09;是面向数字化时代构建的ICT人才培训与认证体系。 当前超过68万来自全球180多个国家和地区的各行业精英已经取得华为认证&#xff0c;如今全球每年超过10万名学员通过考试获得华为认证。 华…

【RabbitMQ】基于Spring Boot + RabbitMQ 完成应用通信

文章目录 需求描述创建项目订单系统(生产者)完善配置声明队列下单接口启动服务 物流系统(消费者)完善配置监听队列启动服务 格式化发送消息对象SimpleMessageConverter定义一个对象生产者代码消费者运行程序 JSON定义一个对象生产者代码定义转换器消费者代码运行程序 需求描述 …

OpenGL Chan视频学习-7 Writing a Shader inOpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再整理具体函数了&#xff0c;网站直接翻译会更直观也会…

Vue 3.0中复杂状态如何管理

在现代前端应用中&#xff0c;状态管理扮演着至关重要的角色。一个良好的状态管理方案能够&#xff1a; 1. 保持应用数据的一致性和可预测性&#xff1b; 2. 简化组件间的通信和数据共享&#xff1b; 3. 提高代码的可维护性和可测试性&#xff1b; 4. 优化应用性能&#xf…

AGI大模型(33):LangChain之Memory

大多数的 LLM 应用程序都会有一个会话接口,允许我们和 LLM 进行多轮的对话,并有一定的上下文记忆能力。但实际上,模型本身是不会记忆任何上下文的,只能依靠用户本身的输入去产生输出。而实现这个记忆功能,就需要额外的模块去保存我们和模型对话的上下文信息,然后在下一次…