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

[flask]flask的路由

路由的基本定义

路由就是一种映射关系。是绑定应用程序(视图)和url地址的一种一对一的映射关系!在开发过程中,编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类,这个类一般就是路由类,简称路由。

flask中,url可以传递路由参数,有2种方式:

路由参数就是url路径的一部分。路由的名称必须全局唯一,不能重复。

# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app = Flask(__name__)# 开启debug模式
app.config["DEBUG"] = True# 参数1:rule设置当前视图的路由地址
# 参数2:methods,设置当前视图的HTTP请求方法,允许一个或多个方法,不区分大小写
@app.route(rule="/", methods=["get", "post"])
def index():return "<h1>hello flask1</h1>"if __name__ == '__main__':# 3. 运行flask提供的测试web服务器程序app.run(host="0.0.0.0", port=5000)
接收任意路由参数
# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app = Flask(__name__)# 开启debug模式
app.config["DEBUG"] = True@app.route(rule="/", methods=["get", "post"])
def index():return "<h1>hello flask1</h1>""""
路由参数的传递
小括号圈住,里面写上参数变量名
在视图中即可通过参数列表按命名来接收
接收参数时,如果没有在设置路由中设置参数的类型,则默认参数类型为字符串类型
"""
@app.route("/goods/<cid>/<gid>")
def goods(gid, cid):print(gid, type(gid))print(cid, type(cid))return f"显示cid={cid},gid={gid}的商品信息"if __name__ == '__main__':# 3. 运行flask提供的测试web服务器程序app.run(host="0.0.0.0", port=5000)

接收限定类型参数

限定路由参数的类型,flask系统自带转换器编写在werkzeug/routing/converters.py文件中。底部可以看到以下字典

# converters用于对路由中的参数进行格式转换与类型限定的
DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] = {"default": UnicodeConverter, # 默认类型,也就是string"string": UnicodeConverter, # 字符串,不包含 /"any": AnyConverter,    # 任意类型"path": PathConverter,  # 也是字符串,但是包含了 /"int": IntegerConverter,"float": FloatConverter,"uuid": UUIDConverter,
}

系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数

转换器名称描述
string默认类型,接受不带斜杠的任何文本
int接受正整数
float接受正浮点值
path接收string但也接受斜线
uuid接受UUID(通用唯一识别码)字符串 xxxx-xxxx-xxxxx-xxxxx
# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app = Flask(__name__)# 开启debug模式
app.config["DEBUG"] = True@app.route(rule="/", methods=["get", "post"])
def index():return "<h1>hello flask1</h1>""""
通过路由转换器来对路由参数显示格式转换和限制类型
"""
@app.route("/goods/<float:cid>/<uuid:gid>")
def goods(gid, cid):print(gid, type(gid))print(cid, type(cid))return f"显示cid={cid},gid={gid}的商品信息"if __name__ == '__main__':# 3. 运行flask提供的测试web服务器程序app.run(host="0.0.0.0", port=5000)

可以在终端获取uuid

没有输入正确的信息就是这样子的

自定义路由参数转换器

也叫正则匹配路由参数.

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问

具体实现步骤为:

  • 导入转换器基类BaseConverter:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
  • 自定义转换器:自定义类继承于转换器基类BaseConverter
  • 添加转换器到默认的转换器字典DEFAULT_CONVERTERS中
  • 使用自定义转换器实现自定义匹配规则

代码实现
这里定义的规则是手机号码

# 1. 导入flask核心类
from flask import Flask# 2. 初始化web应用程序的实例对象
app = Flask(__name__)# 开启debug模式
app.config["DEBUG"] = True"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""# 导入转换器基类
from werkzeug.routing.converters import BaseConverter#自定义转换器
class RegexConverter(BaseConverter):def __init__(self, map, *args, **kwargs):super().__init__(map, *args, **kwargs)self.regex = args[0]#添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters["re"] = RegexConverter@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")
def sms(mobile):return f"发送短信给手机号:{mobile}的用户"@app.route("/goods/<re('\d+'):id>")
def goods(id):return f"显示商品id={id}的信息"if __name__ == '__main__':# 3. 运行flask提供的测试web服务器程序app.run(host="0.0.0.0", port=5000)

运行测试:http://127.0.0.1:5000/sms/13012345671 ,如果访问的url不符合规则,会提示找不到页面

相关文章:

[flask]flask的路由

路由的基本定义 路由就是一种映射关系。是绑定应用程序&#xff08;视图&#xff09;和url地址的一种一对一的映射关系&#xff01;在开发过程中&#xff0c;编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类&#xff0c;这个类一般就是路由类&#xff0c;…...

javaWeb项目-快捷酒店信息管理系统功能介绍

开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 项目关键技术 1、JSP技术 JSP(Java…...

C++ primer 第十五章

1.OPP:概述 面向对象程序设计的核心思想是数据抽象、继承和动态绑定。 通过继承联系在一起的类构成一种层次关系&#xff0c;在层次关系的根部的是基类&#xff0c;基类下面的类是派生类 基类负责定义在层次关系中所有类共同拥有的成员&#xff0c;而每个派生类定义各自特有…...

【数据结构与算法】直接插入排序和希尔排序

引言 进入了初阶数据结构的一个新的主题——排序。所谓排序&#xff0c;就是一串记录&#xff0c;按照其中的某几个或某些关键字的大小&#xff08;一定的规则&#xff09;&#xff0c;递增或递减排列起来的操作。 排序的稳定性&#xff1a;在一定的规则下&#xff0c;两个值…...

HQL,SQL刷题,尚硅谷

目录 相关表数据&#xff1a; 题目及思路解析&#xff1a; 多表连接 1、课程编号为"01"且课程分数小于60&#xff0c;按分数降序排列的学生信息 2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数&#xff0c;按分数升序排列 3、查询该学生不同课程的成绩…...

随机生成用户名、密码、注册时间【Excel】

1.1简介 最近想虚拟一些数据&#xff0c;看下有没有自动生成的工具。百度看了下&#xff0c;大概有这么几种方法 1.excel内置公式函数处理 2.使用使用VBA宏生成随机 3.下载方方格子&#xff0c;emm工具是个好工具&#xff0c;蛮多功能的&#xff0c;每月8块 4.Java函数实现…...

C++函数模板详解(结合代码)

目录 1. 模板概念 2. 函数模板语法 3. 函数模板注意事项 4. 函数模板案例 5. 普通函数与函数模板的区别 6. 普通函数与函数模板的调用规则 7. 模板的局限性 1. 模板概念 在C中&#xff0c;模板是一种通用的程序设计工具&#xff0c;它允许我们处理多种数据类型而不是固…...

Nest学习随笔

一、Middleware(中间件)、Interceptor(拦截器)、ExceptionFilter(异常过滤器) 执行顺序 接口调用正常&#xff1a;Middleware > Interceptor接口调用异常&#xff1a;Middleware > ExceptionFilter 二、访问静态文件 使用 nestjs/serve-static 依赖 配置方法&#x…...

二十二、软考-系统架构设计师笔记-真题解析-2018年真题

软考-系统架构设计师-2018年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.在磁盘调度管理中&#xff0c;应先进行移臂调度&#xff0c;再进行旋转调度。假设磁盘移动臂位于21号柱面上&#xff0c;进程的请求序列如下表所示。如果采用最短移臂调度算法&#xff0c;那么系统…...

2024最新最全Selenium自动化测试面试题!

1、什么是自动化测试、自动化测试的优势是什么&#xff1f; 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势&#xff1a; 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…...

Docker 搭建Redis集群

目录 1. 3主3从架构说明 2. 3主3从Redis集群配置 2.1关闭防火墙启动docker后台服务 2.2 新建6个docker容器实例 2.3 进去任意一台redis容器&#xff0c;为6台机器构建集群关系 2.4 进去6381&#xff0c;查看集群状态 3. 主从容错切换迁移 3.1 数据读写存储 3.1.1 查看…...

spring boot商城、商城源码 欢迎交流

一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁&#xff0c;为生产环境多实例完全准备&#xff0c;数据库为b2b2c设计&#xff0c;拥有完整sku和下单流程的商城 联系: V-Tavendor...

全面解析“通义千问”:功能、优势与使用指南

引言&#xff1a; “通义千问”是由阿里云研发的一款先进的人工智能语言模型&#xff0c;以其强大的自然语言处理能力与广泛的知识覆盖面&#xff0c;在教育、咨询、信息检索等领域发挥着重要作用。本文将详细介绍“通义千问”的核心功能、显著优势以及具体使用方法。 一、“…...

【第三方登录】Google邮箱

登录谷歌邮箱开发者 https://console.developers.google.com/ 先创建项目 我们用的web应用 设置回调 核心主要&#xff1a; 1.创建应用 2.创建客户端ID 3.设置域名和重定向URL 4.对外公开&#xff0c;这样所有的gmail邮箱 都能参与测试PHP代码实现 引入第三方包 h…...

oslo_config学习小结

2.配置文件加载方法 2.1基础 配置文件指的是文件以.conf,.ini结尾等内容为配置项的文件&#xff0c;配置文件内容格式一般为 [DEFAULT] option value [sectiona] optiona valuea optionb valueb [sectionb] optionc valuec optiond valued 2.2加载方法&#xf…...

SpringBoot2.6.3 + knife4j-openapi3

1.引入项目依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.5.0</version> </dependency> 2.新增配置文件 import io.swag…...

PostgreSQL FDW(外部表) 简介

1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…...

Java项目:75 springboot房产销售系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 使用房产销售系统分为管理员和用户、销售经理三个角色的权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、销…...

2.6 IDE(集成开发环境)是什么

IDE&#xff08;集成开发环境&#xff09;是什么 IDE 是 Integrated Development Environment 的缩写&#xff0c;中文称为集成开发环境&#xff0c;用来表示辅助程序员开发的应用软件&#xff0c;是它们的一个总称。 通过前面章节的学习我们知道&#xff0c;运行 C 语言&…...

tomcat和web服务器是什么??

一、什么是服务器 1.服务器是计算机的一种&#xff0c;它比普通计算机运行更快、负载更高。服务器拥有独立IP地址&#xff0c;并且运行了服务器软件。 2.服务器由服务器软件和服务器硬件组成。服务器硬件就是拥有独立ip的计算机&#xff0c;服务器软件是一个被动的软件&#…...

鸿蒙Harmony跨模块交互

1. 模块分类介绍 鸿蒙系统的模块一共分为四种&#xff0c;包括HAP两种和共享包两种 HAP&#xff08;Harmony Ability Package&#xff09; Entry&#xff1a;项目的入口模块&#xff0c;每个项目都有且只有一个。feature&#xff1a;项目的功能模块&#xff0c;内部模式和En…...

由浅到深认识Java语言(30):集合

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…...

Python学习笔记(二)

一&#xff1a;异常&#xff1a; 1.1&#xff1a;异常处理&#xff1a; 1.2&#xff1a;异常捕获&#xff1a; 1.3&#xff1a;异常传递&#xff1a; 二&#xff1a;模块&#xff1a; 2.1&#xff1a;模块的定义&#xff1a; 2.2&#xff1a;模块的导入&#xff1a; 2.3&…...

5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?

&#xff08;2.1) NTD(域控数据库&#xff09;备份 &#xff08;2.2&#xff09;DNS备份 &#xff08;2.3&#xff09;DHCP备份 &#xff08;2.4&#xff09;组策略备份 &#xff08;2.5&#xff09;CA证书备份 &#xff08;2.6&#xff09;系统状态备份 &#xff08;2.1)…...

TCP与UDP:网络协议的技术原理与要点

文章目录 1. TCP&#xff08;传输控制协议&#xff09;1.1 面向连接1.1.1 三次握手1.1.2 为什么需要三次握手&#xff1f;1.1.3 四次挥手1.1.4 为什么需要四次挥手&#xff1f; 1.2 可靠性1.3 有序传输1.4 流量控制1.5 拥塞控制 2. UDP&#xff08;用户数据报协议&#xff09;2…...

vue-office/docx插件实现docx文件预览

1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…...

STM32—控制蜂鸣器(定时器)

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能&#xff08;向上计数或向下计…...

【React】使用 JSX 为 JavaScript 添加标签

使用 JSX 为 JavaScript 添加标签实际上是将 JSX 语法与 JavaScript 代码结合使用&#xff0c;以描述用户界面。JSX 允许你在 JavaScript 中编写类似 HTML 的结构&#xff0c;并最终由 React 库将其转换为真正的 DOM 元素。以下是将标签引入 JavaScript 以及将 HTML 转化为 JSX…...

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…...

python爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…...