当前位置: 首页 > news >正文

Flask(三)路由与视图函数

在 Flask 中,路由 (Route) 是将 URL 地址映射到特定的视图函数 (View Function) 的机制。视图函数处理用户请求,并返回 HTTP 响应。理解路由和视图函数是构建 Flask 应用的基础。

3.1 路由的基本概念

Flask 使用 @app.route() 装饰器来定义路由。以下是一个最简单的路由示例:

from flask import Flaskapp = Flask(__name__)@app.route('/')def home():return "Welcome to Flask!"if __name__ == '__main__':app.run(debug=True)

访问 http://127.0.0.1:5000/ 时,浏览器会显示 "Welcome to Flask!"。

3.2 定义路由规则

3.2.1 静态 URL 路由

@app.route('/about')
def about():return "This is the about page"

访问 http://127.0.0.1:5000/about,会显示 "This is the about page"。

3.2.2 动态 URL 路由

Flask 允许在 URL 中传递参数。例如:

@app.route('/user/<username>')
def user_profile(username):return f"Hello, {username}!"

访问 http://127.0.0.1:5000/user/Alice,会返回 "Hello, Alice!"。

3.2.3 指定变量类型

Flask 支持多种 URL 变量类型:

@app.route('/post/<int:post_id>')
def show_post(post_id):return f"Post ID: {post_id}"@app.route('/price/<float:amount>')
def show_price(amount):return f"Price: ${amount:.2f}"

访问 http://127.0.0.1:5000/post/123,返回 "Post ID: 123"。

访问 http://127.0.0.1:5000/price/9.99,返回 "Price: $9.99"。

支持的类型包括:

  • <int:var>:整数
  • <float:var>:浮点数
  • <string:var>:字符串(默认)
  • <path:var>:包含 / 的字符串

3.2.4 使用 path 变量匹配多级路径

@app.route('/files/<path:filepath>')
def get_file(filepath):return f"File path: {filepath}"

访问 http://127.0.0.1:5000/files/docs/python.pdf,返回 "File path: docs/python.pdf"。

3.3 处理 HTTP 请求方法

默认情况下,Flask 视图函数仅处理 GET 请求。可以使用 methods 参数指定允许的请求类型:

@app.route('/submit', methods=['GET', 'POST'])
def submit():if request.method == 'POST':return "Form submitted via POST"return "Submit a form using POST"

访问 http://127.0.0.1:5000/submit 时,默认返回 "Submit a form using POST"。

使用 POST 方式提交表单时,返回 "Form submitted via POST"。

3.4 视图函数的返回值

3.4.1 返回字符串

@app.route('/hello')
def hello():return "Hello, Flask!"

3.4.2 返回 HTML 代码

@app.route('/html')
def html():return "<h1>Welcome</h1><p>This is an HTML response.</p>"

3.4.3 返回 JSON 数据

from flask import jsonify@app.route('/json')
def json_response():return jsonify({"message": "Hello, JSON", "status": 200})

访问 http://127.0.0.1:5000/json,返回:
{
    "message": "Hello, JSON",

    "status": 200

3.4.4 自定义 HTTP 响应

from flask import Response@app.route('/custom_response')
def custom_response():return Response("Custom Response", status=202, mimetype='text/plain')

返回的 HTTP 头信息包含:

HTTP/1.1 202 Accepted

Content-Type: text/plain

3.5 使用 url_for() 生成 URL

url_for() 用于动态生成 URL,而不是硬编码 URL,保证可维护性。

from flask import url_for@app.route('/profile/<username>')
def profile(username):return f"User: {username}"@app.route('/user-url')
def user_url():return url_for('profile', username='John', _external=True)

访问 http://127.0.0.1:5000/user-url,返回:

http://127.0.0.1:5000/profile/John

3.6 使用 Blueprint 组织路由

在大型应用中,使用 Blueprint 组织路由,提高可维护性。

3.6.1 定义 Blueprint

创建 app/routes.py:

from flask import Blueprintmain = Blueprint('main', __name__)@main.route('/')
def home():return "Welcome to Flask Blueprint!"@main.route('/contact')
def contact():return "Contact Page"

3.6.2 在 app/__init__.py 中注册 Blueprint

from flask import Flask
from app.routes import maindef create_app():app = Flask(__name__)app.register_blueprint(main)return app

这样,所有路由都被组织在 Blueprint 中,提高了可扩展性。

3.7 路由的错误处理

3.7.1 处理 404 错误

@app.errorhandler(404)
def page_not_found(error):return "This page does not exist", 404

访问一个不存在的页面时,会返回 "This page does not exist",并带有 404 状态码。

3.7.2 处理 500 内部服务器错误

@app.errorhandler(500)
def internal_server_error(error):return "Internal Server Error", 500

3.8 结语

本章介绍了 Flask 的路由机制、视图函数、请求方法处理、Blueprint 组织结构以及错误处理。在下一章,我们将深入探讨 Flask 的模板系统。

相关文章:

Flask(三)路由与视图函数

在 Flask 中&#xff0c;路由 (Route) 是将 URL 地址映射到特定的视图函数 (View Function) 的机制。视图函数处理用户请求&#xff0c;并返回 HTTP 响应。理解路由和视图函数是构建 Flask 应用的基础。 3.1 路由的基本概念 Flask 使用 app.route() 装饰器来定义路由。以下是…...

mysql 磐维(opengauss)tidb误删数据之高级恢复

Mysql参考&#xff1a; Mysql 8.0 XtraBackupMysqlbinlog 完全恢复 - 墨天轮 Mysql 8.0 XtraBackupMysqlbinlog 完全恢复[TOC]# 一、安装mysql 8.0.19## 1.1https://www.modb.pro/db/509223MySQL 的全量备份、增量备份与 Binlog 时间点恢复_mysqlbinlog自动备份吗-CSDN博客文章…...

常见框架漏洞(一)----Thinkphp(TP)

Thinkphp框架介绍&#xff1a; ThinkPHP是为了简化企业级应⽤开发和敏捷WEB应⽤开发⽽诞⽣的&#xff0c;是⼀个快速、兼容⽽ 且简单的轻量级国产PHP开发框架&#xff0c;诞⽣于2006年初&#xff0c;原名FCS&#xff0c;2007年元旦正式更名为 ThinkPHP&#xff0c;遵循Apache…...

Git 使用指南:从设置用户信息到项目提交的全流程教程(持续更新)

一、设置 Git 用户信息 1.全局设置&#xff08;适用于所有 Git 仓库&#xff09;&#xff1a; git config --global user.name "Your Name" git config --global user.email youexample.com 2.仅针对当前仓库设置&#xff08;如果您只想为当前项目设置&#xff0…...

Json在扩展属性xdata中的应用实例——cad 二次开发c#

以下是一个使用AutoCAD C#.NET API实现你需求的示例代码&#xff0c;代码实现了提示用户选择一个实体&#xff0c;将一些字符串变量及其对应的值组成JSON格式数据存储到实体的扩展数据&#xff08;XData&#xff09;中&#xff0c;并在弹出窗口中显示该实体的所有扩展数据信息。…...

Unity Animation的其中一种运用方式

Animation是Unity的旧的动画系统&#xff0c;先说目的&#xff0c;其使用是为了在UI中播放动效&#xff0c;并且在动效播放结束后接自定义事件而设计的 设计的关键点在于&#xff0c;这个脚本不是通过Animation直接播放动画片段&#xff0c;而是通过修改AnimationState的nor…...

C++ 的基本内置类型(十二)

C 作为一门强大的编程语言&#xff0c;其内置类型是开发者必须掌握的基础。本文将详细介绍 C 的基本内置类型&#xff0c;包括算术类型和空类型&#xff0c;探讨它们的特性、尺寸以及在机器上的实现方式。 一、 基本内置类型概述 C 定义了一套基本数据类型&#xff0c;主要包…...

Android设计模式之单例模式

一、定义&#xff1a;确保一个类只有一个实例&#xff0c;并且自动实例化&#xff0c;并向整个系统提供这个实例。 二、使用场景&#xff1a;避免重复创建对象&#xff0c;过多消耗系统资源。 三、使用方式 3.1饿汉式&#xff1a;类加载时立即初始化&#xff0c;线程安全&…...

随笔(1)

1、解除切屏限制命令 document.body.onblur null2、vue3 getCurrentInstance import { getCurrentInstance } from vue const {proxy} getCurrentInstance() proxy.mittBus.emit(message,xxxx)3、 自定义双向绑定&#xff0c;modelValue 就是对应输入框的值 emit(update:mo…...

系统与网络安全------网络应用基础(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 路由器 认识路由器 负责在不同网络之间转发数据的设备 路由器决定到达目标的路径 路由器也为直连网络的主机充当”网关“角色 路由器是实现网络互连的最核心设备 工作原理 每台路由器维护一份路由表&…...

Java 基于微信小程序的开放实验室预约管理系统

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…...

Linux内核NIC网卡驱动实战案例分析

以下Linux 内核模块实现了一个虚拟网络设备驱动程序&#xff0c;其作用和意义如下&#xff1a; 1. 作用 &#xff08;1&#xff09;创建虚拟网络设备对 驱动程序动态创建了两个虚拟网络设备&#xff08;nic_dev[0]和nic_dev[1]&#xff09;&#xff0c;模拟物理网卡的功能。这两…...

R 基础语法

R 基础语法 引言 R 是一种针对统计计算和图形表示而设计的编程语言和环境。它广泛应用于统计学、生物信息学、数据挖掘等领域。本文将为您介绍 R 语言的基础语法,帮助您快速上手。 R 的基本结构 R 语言的基本结构包括:变量、数据类型、运算符、控制结构、函数等。 变量 …...

JDK 24 发布,新特性解读!

一、版本演进与技术格局新动向 北京时间3月20日&#xff0c;Oracle正式发布Java SE 24。作为继Java 21之后的第三个非LTS版本&#xff0c;其技术革新力度远超预期——共集成24项JEP提案&#xff0c;相当于Java 22&#xff08;12项&#xff09;与Java 23&#xff08;12项&#…...

在 Qt 中,不带参数或整形的参选的信号能够从 std::thread 发送成功,而带枚举离线的信号却发送失败

在 Qt 中&#xff0c;不带参数或整形的参选的信号能够从 std::thread 发送成功&#xff0c;而带枚举离线的信号却发送失败 当信号和槽在不同线程时&#xff0c;默认使用 队列连接&#xff08;Qt::QueuedConnection&#xff09;&#xff0c;信号会被放入接收线程的事件队列&…...

慧通测控汽车智能座舱测试技术

一、引言 随着科技的飞速发展&#xff0c;汽车正从单纯的交通工具向智能化移动空间转变。智能座舱作为这一转变的核心体现&#xff0c;融合了多种先进技术&#xff0c;为用户带来前所未有的驾驶体验。从简单的信息娱乐系统到高度集成的人机交互、智能驾驶辅助以及车辆状态监测…...

【CSS】CSS 使用全教程

CSS 使用全教程 介绍 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种样式表语言&#xff0c;用于描述 HTML 或 XML 文档的布局和外观&#xff0c;它允许开发者将文档的内容结构与样式表现分离&#xff0c;通过定义一系列的样式规则来控制网页…...

【Linux知识】RPM软件包安装命令行详细说明

文章目录 概述安装软件包升级软件包卸载软件包查询软件包信息验证软件包从软件包中提取文件注意事项 概述 rpm&#xff08;Red Hat Package Manager&#xff09;是红帽系 Linux 发行版&#xff08;如 Red Hat、CentOS、Fedora 等&#xff09;用于管理软件包的工具&#xff0c;…...

SpringBoot3.0不建议使用spring.factories,使用AutoConfiguration.imports新的自动配置方案

文章目录 一、写在前面二、使用imports文件1、使用2、示例比对3、完整示例 参考资料 一、写在前面 spring.factories是一个位于META-INF/目录下的配置文件&#xff0c;它基于Java的SPI(Service Provider Interface)机制的变种实现。 这个文件的主要功能是允许开发者声明接口的…...

c++项目-KV存储-模仿redis实现kv键值对存储的基本功能。

KV存储引擎的技术解析&#xff1a;数组、哈希与红黑树实现及其在网络I/O中的应用。 内容概要&#xff1a;本文档深入介绍了基于数组、哈希表和红黑树的键值存储引擎的设计与实现。文档首先阐述了系统的总体架构与类图关系&#xff0c;之后分别对底层存储结构进行了详细解释&am…...

docker ssh远程连接

目录 操作命令&#xff1a; 确保 SSH 配置允许 root 登录&#xff1a; docker提交&#xff1a; 操作命令&#xff1a; # 进入容器 docker exec -ti lbg04 /bin/bash# 更新包管理并安装 SSH 服务&#xff08;Ubuntu/Debian 示例&#xff09; apt-get update apt-get install…...

边缘计算场景下的分布式推理系统架构设计

一、边缘节点推理优化 1.1 模型轻量化技术矩阵 1.2 TensorRT加速配置示例 # 使用TensorRT优化YOLOv8builder trt.Builder(TRT_LOGGER)network builder.create_network()parser trt.OnnxParser(network, TRT_LOGGER)with open("yolov8s.onnx", "rb") a…...

css基础-浮动

一、浮动是什么&#xff1f; 比喻&#xff1a;就像泳池里的救生圈 原始用途&#xff1a;让文字环绕图片&#xff08;像杂志排版&#xff09;意外发展&#xff1a;被用来做页面布局&#xff08;像用救生圈搭浮桥&#xff09; 二、浮动怎么产生的&#xff1f; 场景还原&#…...

Linux TTY设备汇总

目录 1. ‌tty(终端设备统称) 2. ‌ptm(伪终端主设备)与pts(伪终端从设备) 3. ‌ttys(串行端口终端) 4. ‌ttyACM(USB CDC ACM设备) 5. ‌ttyGS(USB Gadget Serial设备) 主要联系‌ ‌典型应用场景‌ TTY_CORE: drivers/tty/tty_io.c:tty_register_driver…...

Android studio组合教程--做出一个类似于QQ的登录页面

之前我们学过了html与Android的开发&#xff0c;以及各种组件的学习&#xff0c;这次我们做一个完整向的登录页面&#xff0c;作为一次大作业。 注意 里面的一图片可以自由发挥&#xff0c;但要注意文件路径保持准确&#xff0c;这里给出参考路径&#xff1a; 背景路径&…...

iPhone 16 Plus :凉凉了

大屏就是生产力&#xff0c;这句话就像思想钢印一样&#xff0c;深入人心。 但苹果用户是个例外&#xff0c;根据内行人的爆料&#xff0c;iPhone 16 Plus 彻底凉凉了&#xff0c;难怪它会是最后一代Plus。 根据知名博主数码闲聊站透露&#xff0c;截止3 月 9 号&#xff0c;i…...

【MySQL报错】:Column count doesn’t match value count at row 1

MySQL报错&#xff1a;Column count doesn’t match value count at row 1 意思是存储的数据与数据库表的字段类型定义不相匹配. 由于类似 insert 语句中&#xff0c;前后列数不等造成的 主要有3个易错点&#xff1a; 要传入表中的字段数和values后面的值的个数不相等。 由于类…...

2025 polarctf春季个人挑战赛web方向wp

来个弹窗 先用最基础的xss弹窗试一下 <script>alert("xss")</script>没有内容&#xff0c;猜测过滤了script&#xff0c;双写绕过一下 <scrscriptipt>alert("xss")</scscriptript>background 查看网页源代码 查看一下js文件 类…...

Midscene.js自然语言驱动的网页自动化全指南

一、概述 网页自动化在数据抓取、UI 测试和业务流程优化中发挥着重要作用。然而&#xff0c;传统工具如 Selenium 和 Puppeteer 要求用户具备编程技能&#xff0c;编写复杂的选择器和脚本维护成本高昂。Midscene.js 通过自然语言接口革新了这一领域&#xff0c;用户只需描述任…...

PDF与Markdown的量子纠缠:一场由VLM导演的文档界奇幻秀

缘起:当格式界的"泰坦尼克号"撞上"黑客帝国" 某个月黑风高的夜晚,在"二进制酒吧"的霓虹灯下: PDF(西装革履地晃着威士忌): “我的每一页都像瑞士手表般精密,连华尔街的秃鹫都为我倾倒!” Markdown(穿着带洞的拖鞋): “得了吧老古董!…...

Spring Boot JSON序列化深度管控:忽略指定字段+Jackson扩展策略破解双向实体循环引用问题

一、JsonIgnore的核心原理与工作机制 1. 注解作用原理 JsonIgnore是Jackson库的核心注解之一&#xff0c;其工作原理基于 Jackson的AnnotationIntrospector机制。在序列化/反序列化过程中&#xff0c;Jackson会扫描Java对象的所有字段和方法上的注解。当检测到JsonIgnore时&a…...

msvcp140.dll是什么文件?修复丢失msvcp140.dll的方法指南

当计算机显示"msvcp140.dll未找到"的报错信息时&#xff0c;这实际反映了Windows系统运行机制中的一个关键环节出现断链。作为Microsoft Visual C可再发行组件包的核心动态链接库&#xff0c;msvcp140.dll承担着程序与系统资源之间的桥梁作用&#xff0c;特别是在处理…...

ES集群的部署

实验步骤 实验目的&#xff1a; 验证ES集群的容错性、扩展性数据分布与查询性能优化。 环境准备​ ​1、准备两台服务器 服务器 1、10.1.1.20 cpu 2核 内存&#xff1a;4G 硬盘100G 2、10.1.1.21 cpu 2核 内存&#xff1a;4G 硬盘100G 2、修改两台静态ip 3、关闭防…...

resetForm() 方法用于重置表单

resetForm() 方法是 Vue.js 中用于重置表单的一个常见操作。下面是对这段代码的详细解析&#xff1a; 1. 代码作用 resetForm() 方法的作用是重置表单&#xff0c;将表单中的所有输入字段恢复到初始状态&#xff08;通常是清空或恢复到默认值&#xff09;。 2. 代码解析 re…...

Java后端API限流秘籍:高并发的防护伞与实战指南

目录导航 📜 🛡️ 为什么需要API限流?🧠 主流限流算法大解析👩‍💻 阿里巴巴的限流实践📏 四大黄金定律🤼 限流策略组合拳🏆 限流场景实战💻 技术实现方案🌟 最佳实践分享📈 结语与展望📚 推荐阅读 1. 🛡️ 为什么需要API限流? 在高并发环境中,未…...

团体协作项目总结Git

使用Git开放时候发现本地, 有些代码并没有被拉取到本地仓库, 又不想再commit一次, 这时候我就想到了 git commit --amend 合并提交 git commit --amend 修改git提交记录用法详解 可以将本次提交记录合并到上一次合并提交 git commit --amendgit rebase -i master^^ // 假设我…...

mysql 入门

1.已经下载过却卸载不干净&#xff1f;注册表清理不到位&#xff1f; 使用greek绿色版 强力卸载&#xff0c;可以一键卸载注册表里的信息。 2.如何启动mysql服务&#xff1f; 以管理员方式启动cmd 输入 net start mysql80 如何停止&#xff1f; net stop mysql80 2.将mysql客…...

1.基于TCP的简单套接字服务器实现

目录 1. TCP通信流程 2. 服务器端的通信流程 2.1 创建用于监听的套接字 2.2 绑定本地IP地址和端口 2.3 设置监听 2.4 等待接受客户端的连接请求 2.5 与客户端进行通信 2.6 客户端连接服务器 3.代码实现 client.cpp server.cpp 运行方式 在本文中&#xff0c;我们将…...

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统&#xff0c;以下是在 Windows 10 上安装部署 MantisBT 的详细步骤&#xff1a; 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序&#xff0c;因此需要安装 Web 服务器&#xff08;如 Apache&#xff09;、PHP 和数据…...

zookeepernacoskafka之间的联系

一、ZooKeeper与Kafka的协同工作原理 1. 核心关系&#xff1a;Kafka对ZooKeeper的依赖 在Kafka 2.8版本之前&#xff0c;ZooKeeper是Kafka集群的“大脑”&#xff0c;负责管理集群元数据、协调节点状态和故障恢复。两者的协同主要通过以下关键机制实现&#xff1a; Broker注册…...

【QT】 布局器

参考博客&#xff1a;https://blog.csdn.net/Fdog_/article/details/107522283 目录 布局管理器概念常见的布局管理器及特点&#x1f535;QHBoxLayout水平布局&#x1f535;QVBoxLayout垂直布局 &#x1f535;QGridLayout网格布局 &#x1f535;QFormLayout表单布局 QT 高级布…...

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…...

【蓝桥杯】真题 路径(数论+dp)

思路 求最小公倍数LCM问题很好求&#xff0c;这里看似是求图最短路径&#xff0c;实际上由于只有[i,i21]之间存在路径&#xff0c;所以用线性dp效率更高&#xff0c;当然用bfs&#xff0c;dijstra&#xff0c;floyed也可&#xff0c;毕竟是填空题。 code def gcd(a,b):if a …...

敏捷需求分析之INVEST原则

INVEST原则是什么 INVEST 是用户故事的六个核心标准,由敏捷教练 Bill Wake 提出,用于确保用户故事具备可执行性和价值导向性。 1. I - Independent(独立的) 含义:用户故事应独立于其他故事,避免依赖关系。问题:若故事 A 必须等待故事 B 完成才能开发,会导致进度阻塞。…...

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…...

UE5小石子阴影在非常近距离才显示的问题

Unreal中采用LandscapeGrass生成的地形&#xff0c;在MovieRenderQueue中渲染时阴影显示距离有问题&#xff0c;在很近的时候才会有影子&#xff0c;怎么解决&#xff1f; 地面上通过grass生成的小石子的阴影只能在很近的时候才能显示出来&#xff0c;需要如下调整 r.Shadow.R…...

WebAssembly实践,性能也有局限性

个人博客原文地址 WebAssembly&#xff08;简称 wasm&#xff09; 是一种旨在突破 Web 性能瓶颈的技术方案。它由 W3C 官方推动&#xff0c;并且得到了主流浏览器的广泛支持。它的核心思想是通过运行其他高性能编程语言&#xff08;比如 C、C、Rust 等&#xff09;来实现复杂功…...

第一天学爬虫

阅读提示&#xff1a;我今天才开始尝试爬虫&#xff0c;写的不好请见谅。 一、准备工具 requests库&#xff1a;发送HTTP请求并获取网页内容。BeautifulSoup库&#xff1a;解析HTML页面并提取数据。pandas库&#xff1a;保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(11)

1.问题描述&#xff1a; 鸿蒙push右侧图表没有正常展示。 解决方案&#xff1a; .jpg格式文件&#xff0c;头信息必须是这个“jpg&#xff1a;ffd8”。 2.问题描述&#xff1a; 安卓端App在开发者平台申请了Android应用的通知消息自分类权益&#xff0c;鸿蒙应用的自分类权…...

Spring WebSecurityCustomizer 的作用

Spring WebSecurityCustomizer 是 Spring Security 框架中用来 自定义 Web 安全配置 的一个接口。 它的主要作用是在开发中我们能够 精细的控制哪些请求会被 Spring Security 完全忽略&#xff0c;不进行任何安全检查和过滤。 我们可以把它想象成是 Spring Security 大门上的一…...