Flask路由的使用

Flask 是一个轻量级的 Python Web 框架,其简洁的设计使得构建 Web 应用变得轻而易举。其中,路由是 Flask 中至关重要的一部分,它定义了 URL 与视图函数之间的映射关系,决定了用户请求的处理方式。在本文中,我们将深入探讨 Flask 路由的多种用法,包括创建路由、经典路由、动态路由等。

创建路由

在 Flask 中,通过装饰器 @app.route() 可以轻松地创建路由。下面是一个简单的示例:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'

上述代码中,@app.route('/') 表示将 URL / 映射到了名为 index 的视图函数上,当用户访问根目录时,将会返回 ‘Hello, Flask!’。

经典路由

经典路由即静态路由,它直接将 URL 与视图函数一一对应。例如:

@app.route('/about')
def about():return 'About Us'

上述代码中,当用户访问 /about 时,将会触发名为 about 的视图函数,返回 ‘About Us’。

动态路由

动态路由允许在 URL 中包含可变的部分,这使得我们能够处理更加灵活的请求。例如,我们可以接受用户传递的参数:

@app.route('/user/<username>')
def show_user_profile(username):return 'User %s' % username

在上述示例中,<username> 表示动态部分,Flask 将会将实际的用户名作为参数传递给视图函数 show_user_profile

给动态路由设定变量类型

默认情况下,动态路由中的变量被视为字符串。但是,我们可以使用 <converter:variable_name> 的语法指定变量的类型。常见的类型包括 intfloatpath 等。

@app.route('/post/<int:post_id>')
def show_post(post_id):return 'Post %d' % post_id

上述示例中,<int:post_id> 指定了 post_id 应当是一个整数。

  • converter用于指定变量类型
  • variable_name表示变量名

  • 类型参考表
URL规则描述示例
/user/<string:username>字符串类型。匹配任何字符串,不包括斜杠/user/johndoe
/post/<int:post_id>整数类型。匹配正整数。/post/123
/price/<float:price>浮点数类型。匹配浮点数。/price/9.99
/path/<path:path>路径类型。匹配包含斜杠的字符串。/path/foo/bar
/uuid/<uuid:uuid_value>UUID 类型。匹配 UUID 格式的字符串。/uuid/123e4567-e89b-12d3-a456-426614174000
/any/<any:any_value>任意类型。匹配任何类型的字符串。 /<any(geek,item):tmp>/<int:id>
  • 各种类型参考
from flask import Flaskapp = Flask(__name__)# 字符串类型
@app.route('/user/<string:username>')
def user_profile(username):return f'User Profile: {username}'# 整数类型
@app.route('/post/<int:post_id>')
def show_post(post_id):return f'Showing post #{post_id}'# 浮点数类型
@app.route('/price/<float:price>')
def show_price(price):return f'The price is: {price}'# 路径类型
@app.route('/path/<path:path>')
def show_path(path):return f'The path is: {path}'# UUID类型
@app.route('/uuid/<uuid:uuid_value>')
def show_uuid(uuid_value):return f'The UUID is: {uuid_value}'# 任意类型
@app.route('/<any(geek,item):tmp>/<int:id>')
def get_any(tmp, id):if tmp == "geek":return f"geek:{id}"elif tmp == "item":return f"item:{id}"else:return Noneif __name__ == '__main__':app.run(debug=True)

自定义路由变量类型

除了内置的变量类型外,我们还可以自定义路由变量类型。通过在应用对象上注册转换器,我们可以创建自己的转换逻辑。

import typing as tfrom flask import Flask
from werkzeug.routing import BaseConverterapp = Flask(__name__)# 自定义手机号码类型转换器
class PhoneConverter(BaseConverter):regex = "1[1-9]\d{9}"def to_python(self, value: str) -> t.Any:return int(value)# 注册自定义手机号码类型转换器
app.url_map.converters['phone'] = PhoneConverter# 使用自定义手机号码类型转换器的动态路由
@app.route('/phone/<phone:user_phone>')
def user_profile(user_phone):return f'你的手机号是: {user_phone}'if __name__ == '__main__':app.run(debug=True)

结语

通过本文的介绍,我们对 Flask 路由的使用有了更深入的了解。除了基本的路由创建外,我们还学习了如何处理动态路由,以及如何自定义路由变量类型。这些功能使得 Flask 在构建 Web 应用时更加灵活和强大。希望本文对您有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

服务运营 | 精选:用药难?用药贵?运筹学与统计学视角下的药物研发与管理

作者设计了一个多阶段博弈论模型来针对罕见病的不同补贴方案&#xff0c;分析政府、联盟、制药商和患者之间的相互作用。 制药商补贴为 α C \alpha C αC&#xff0c;其中 C C C是研发成本&#xff0c; α ∈ [ 0 , 1 ) \alpha \in [0,1) α∈[0,1)是政府总成本的比例。患者补…

ASP.NET淘宝店主交易管理系统的设计与实现

摘 要 淘宝店主交易管理系统主要采用了ASPACCESS的B/S设计模式&#xff0c;通过网络之间的数据交换来实现客户、商品、交易的管理和对客户、商品、交易统计工作&#xff0c;从而提高淘宝店主在管理网店过程中的工作效率和质量。 系统分为基本资料模块&#xff0c;统计资料模…

系统调用 int 86 的过程

该图借鉴与 Linux系统调用全过程详解-高性能服务器开发&#xff0c;向作者致敬。

Vue 之 在当前页面的实现分页效果

目录 场景实现 场景 假设&#xff0c;我们现在有这么一个需求&#xff1a; 上述图片的空白内容是活动的&#xff0c;由下面的两个按钮控制上一页、下一页&#xff1b;我们应该可以怎么去实现&#xff1f; 实现 思路&#xff1a; 其实这个问题&#xff0c;我们仿照其他的UI框…

关于远程桌面与3389端口的深度解析

当我们谈论远程桌面和3389端口时&#xff0c;我们实际上是在探讨Windows操作系统的一个核心功能&#xff0c;该功能允许用户通过网络从任何地点远程控制和管理计算机。而3389端口&#xff0c;正是这一功能所依赖的通信端口。 一、远程桌面的工作原理 远程桌面协议&#xff08;R…

AppWeb 身份验证绕过漏洞 (CVE-2018-8715)

一、docker的相关操作&#xff08;默认安装了docker-compose&#xff09; 在相应的文件夹位置打开终端后进行如下操作 运行此靶场 sudo docker-compose up -d 查看启动环境 sudo docker ps 关闭此靶场环境 sudo docker-compose down 二、漏洞描述 AppWeb 是一个嵌入式 Web 服…

数组克隆/复制

数组的复制/克隆 1.浅克隆2.深克隆3.使用System.ArrayCopy()方法4.使用Arrays.copyOf()方法5.使用Arrays.copyOfRange()方法6.使用Object.clone()方法 1.浅克隆 将原来数组的地址赋值给新数组&#xff0c;两个数组名指向了同一个数组&#xff0c;修改其中一个中的元素&#xff…

jvm面试题30问

什么是JVM的跨平台&#xff1f; 什么是JVM的语言无关性&#xff1f; 什么是JVM的解释执行 什么是JIT? JIT&#xff1a;在Java编程语言和环境中&#xff0c;即时编译器&#xff08;JIT compiler&#xff0c;just-in-time compiler&#xff09;是一个把Java的字节码&#xff08;…

【精选文献】JAG|基于时序Sentinel-1 SAR影像小农耕作区烟草空间分布制图

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 03 研究区域与数据集 04 研究方法 05 研究结果 06 研究讨论 07 研究结论 08 文章引用 文章简介 论文名称&#xff1a;Mapping tobacco planting areas in smallholder farmlands using Phenological-Spatial-Te…

【自用】在ipad上安装.ipa文件

借助爱思助手在ipad上安装.ipa文件 爱思助手官网&#xff08;www.i4.cn&#xff09; 对于不能上架 App Store 的应用&#xff0c;可以使用证书签名或使用 Apple ID 签名后正常安装到设备。准备好证书或 Apple ID以及需要签名的 IPA 文件&#xff0c;使用爱思助手就可以快速完成…

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接 import socket from ohos.net.socket; import process from ohos.process; import wifiManager from ohos.wifiManager;import common from ohos.app.ability.common;let tcp socket.constructTCPSocketInstance();…

[数据结构]———交换排序

目录 ​编辑 ​编辑 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结&#xff1a; 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想&#xff1a;所谓交换&#xff0…

Gromacs软件进行蛋白-配体体系MD模拟

1、进行能量最小化 下载官方提供的参数文件&#xff1a;em.mdp &#xff0c;或者直接复制这里&#xff1a; ; LINES STARTING WITH ; ARE COMMENTS title Minimization ; Title of run; Parameters describing what to do, when to stop and what to save integrator …

golang 基础知识细节回顾

之前学习golang的速度过于快&#xff0c;部分内容有点囫囵吞枣的感觉&#xff0c;写gorm过程中有很多违反我常识的地方&#xff0c;我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大&#xff0c;之前编辑springboot的error c…

Go Web 开发基础【用户登录、注册、验证】

前言 这篇文章主要是学习怎么用 Go 语言&#xff08;Gin&#xff09;开发Web程序&#xff0c;前端太弱了&#xff0c;得好好补补课&#xff0c;完了再来更新。 1、环境准备 新建项目&#xff0c;生成 go.mod 文件&#xff1a; 出现报错&#xff1a;go: modules disabled by G…

《原则》生活和工作 - 三余书屋 3ysw.net

原则&#xff1a;生活和工作 您好&#xff0c;今天我们解读的书是《原则&#xff1a;生活和工作》。这本书和我们之前解读过的《原则&#xff1a;应对变化中的世界秩序》是同一个作者写的。那本书的主题非常宏大&#xff0c;它讨论的是世界运行的原则。而今天我们聊的《原则&a…

05 - 步骤 JSON output

简介 JSON Output 步骤用于将 Kettle 中的行流数据写出到 JSON 格式的文件或流中。它允许用户将 Kettle 中处理过的数据以 JSON 格式进行输出&#xff0c;适用于各种数据处理和交换场景。 什么是行流数据&#xff1f; preview data 中的每一个字段都是一个行流数据 使用 场…

Java | Leetcode Java题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePaths(int m, int n) {long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return (int) ans;} }

C# Winform父窗体打开新的子窗体前,关闭其他子窗体

随着Winform项目越来越多&#xff0c;界面上显示的窗体越来越多&#xff0c;窗体管理变得更加繁琐。有时候我们要打开新窗体&#xff0c;然后关闭多余的其他窗体&#xff0c;这个时候如果一个一个去关闭就会变得很麻烦&#xff0c;而且可能还会出现遗漏的情况。这篇文章介绍了三…

《R语言与农业数据统计分析及建模》学习——logistic回归和poisson回归

普通线性回归通常用来描述变量y与x之间的线性关系&#xff1a; 普通线性模型的假设是&#xff1a;响应变量y是连续型变量而且&#xff0c;服从正态分布分布。但在很多现实情况y并不是正态分布&#xff0c;如&#xff1a;二值问题/多分类问题&#xff0c;计次问题等&#xff0c;…