Flask学习(四):路由转换器

默认的路由转换器:

string  (缺省值) 接受任何不包含斜杠的文本
int接受正整数
float接受正浮点数  
path类似 string,但可以包含斜杠
uuid接受 UUID 字符串  


代码示例:

@app.route('/user/<username>')
def show_user_profile(username):return 'User %s' % escape(username)@app.route('/post/<int:post_id>')
def show_post(post_id):return 'Post %d' % post_id@app.route('/path/<path:subpath>')
def show_subpath(subpath):return 'Subpath %s' % escape(subpath)

自定义路由转换器:

from flask import Flask
# 导入所有转换器的基类BaseConverter
from werkzeug.routing import BaseConverter
# 生成实例对象
app = Flask(__name__)# 创建自定义转换器 继承转换器的基类BaseConverter
class RegexConverter(BaseConverter):# 重写构造方法传入url_map,regexdef __init__(self, url_map, regex):super().__init__(map=url_map)self.regex = regex# 将定义的 RegexConverter 添加到 Flask 应用的 URL 转换器字典中,并为其分配了一个键 're'。可以在路由中使用 re:<pattern> 来使用这个转换器。
app.url_map.converters['re'] = RegexConverter# re中传入正则表达式 校验手机号格式是11位
@app.route("/index1/<re(r'\d{11}'):mobile>")
def index1(mobile):print(mobile)return "Index"if __name__ == "__main__":app.run()

注:通过app.url_map.converters['re'] = RegexConverter注册自定义转换器后,打印出的结果如下:

print(app.url_map.converters)
#结果:
{'default': <class 'werkzeug.routing.converters.UnicodeConverter'>, 'string':  <class 'werkzeug.routing.converters.UnicodeConverter'>, 'any':  <class 'werkzeug.routing.converters.AnyConverter'>, 'path':  <class 'werkzeug.routing.converters.PathConverter'>,'int':  <class 'werkzeug.routing.converters.IntegerConverter'>, 'float':  <class 'werkzeug.routing.converters.FloatConverter'>, 'uuid':  <class 'werkzeug.routing.converters.UUIDConverter'>, #自定义转换器,上面为默认转换器're':  <class '__main__.RegexConverter'>}
-----------------------------------------------------------------------
#源代码中的映射关系:
#: the default converter mapping for the map.
DEFAULT_CONVERTERS: t.Mapping[str, type[BaseConverter]] = {"default": UnicodeConverter,"string": UnicodeConverter,"any": AnyConverter,"path": PathConverter,"int": IntegerConverter,"float": FloatConverter,"uuid": UUIDConverter,
}

所有转换器的基类:

class BaseConverter:# 匹配多个不包含/的字符串regex = "[^/]+"# 权重weight = 100part_isolating = True# 类方法 子类被创建的时候会被调用def __init_subclass__(cls, **kwargs: t.Any) -> None:super().__init_subclass__(**kwargs)# __dict__就是用来存储对象属性的一个字典,键是属性名,值是属性的值# 重写了regex属性并没有重写part_isolating属性if "regex" in cls.__dict__ and "part_isolating" not in cls.__dict__:# 设置part_isolating 的值cls.part_isolating = "/" not in cls.regex# 构造方法def __init__(self, map: Map, *args: t.Any, **kwargs: t.Any) -> None:self.map = map# 将 URL 中的字符串值转换为 Python 中使用的值def to_python(self, value: str) -> t.Any:return value# 将 Python 中的值转换为 URL 中使用的字符串def to_url(self, value: t.Any) -> str:# safe = https://url.spec.whatwg.org/#url-path-segment-stringreturn quote(str(value), safe="!$&'()*+,/:;=@")

基类中的to_python方法,可以在子类中进行重写,并按照需求将url进行处理转换成需要的值:

from flask import Flask
from werkzeug.routing import BaseConverterapp = Flask(__name__)class RegexConverter(BaseConverter):# 重写的to_python方法,将 URL 中的字符串值转换为 Python 中使用的值def to_python(self, value):# 返回参数通过+ 分割之后的数据return value.split('+')app.url_map.converters['re'] = RegexConverter#http://127.0.0.1:5000/index1/12+56
@app.route("/index1/<re:info>")
def index(info):print(info)return "Index"if __name__ == "__main__":app.run()

执行的结果:

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

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

相关文章

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行自然语言处理&#xff08;NLP&#xff09;&#xff1a;NLTK与Spacy的比较 自…

用尾插的思想实现移除链表中的元素

目录 一、介绍尾插 1.链表为空 2.链表不为空 二、题目介绍 三、思路 四、代码 五、代码解析 1. 2. 3. 4. 5. 6. 六、注意点 1. 2. 一、介绍尾插 整体思路为 1.链表为空 void SLPushBack(SLTNode** pphead, SLTDataType x) {SLTNode* newnode BuyLTNode(x); …

蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C++)

并查集 并查集是大量的树&#xff08;单个节点也算是树&#xff09;经过合并生成一系列家族森林的过程。 可以合并可以查询的集合的一种算法 可以查询哪个元素属于哪个集合 每个集合也就是每棵树都是由根节点确定&#xff0c;也可以理解为每个家族的族长就是根节点。 元素集合…

【开源鸿蒙】模拟运行OpenHarmony轻量系统QEMU RISC-V版

文章目录 一、准备工作1.1 编译输出目录简介 二、QEMU安装2.1 安装依赖2.2 获取源码2.3 编译安装2.4 问题解决 三、用QEMU运行OpenHarmony轻量系统3.1 qemu-run脚本简介3.2 qemu-run脚本参数3.3 qemu-run运行效果3.4 退出QEMU交互模式 四、问题解决五、参考链接 开源鸿蒙坚果派…

YOLOv8改进 | 图像去雾 | 门控可微分图像处理GDIP模块改善物体低照度检测检测(适用于图片不清晰等一切场景,全网独家首发)

一、本文介绍 本文给大家带来的改进机制是门控可微分图像处理GDIP模块&#xff0c;其可以理解为是一直图像增强领域的模块&#xff0c;其主要适用于雾天的一些去雾检测&#xff0c;当然了也适用于于一些图片模糊不清的场景&#xff0c;GDIP&#xff08;Gated Differentiable Im…

论文阅读——EarthPT

EarthPT: a time series foundation model for Earth Observation 一个Earth Observation (EO)预训练的Transformer。EarthPT是一个7亿参数解码Transformer基础模型&#xff0c;以自回归自监督方式进行训练&#xff0c;并专门针对EO用例进行开发。我们证明了EarthPT是一个有效的…

谷歌(edge)浏览器过滤,只查看后端发送的请求

打开F12 调试工具 选择Network 这是我们会发现 什么图片 文件 接口的请求很多很多&#xff0c;我们只需要查看我们后端发送的请求是否成功就好了 正常情况我们需要的都是只看接口 先点击这里这个 过滤 我们只需要点击 Fetch/XHR 即可过滤掉其他请求信息的展示 这样烦恼的问题就…

海豚调度系列之:单机部署

海豚调度系列之&#xff1a;单机部署 一、前置准备工作二、启动 DolphinScheduler Standalone Server三、登录 DolphinScheduler四、启停服务五、配置数据库 Standalone 仅适用于 DolphinScheduler 的快速体验. 如果你是新手&#xff0c;想要体验 DolphinScheduler 的功能&…

windows下修改mysql的max_allowed_packet的值

1)C:\Program Files\MySQL\MySQL Server 5.7 在MySQL 的安装目录下添加my.ini文件&#xff0c;同时添加空的data文件 2&#xff09;my.ini文件内容如下&#xff0c; [mysqld] port 3306 basedirC:\Program Files\MySQL\MySQL Server 5.7 datadirC:\Program Files\MySQL\MySQ…

【鸿蒙HarmonyOS开发笔记】自定义组件详解

自定义组件 除去系统预置的组件外&#xff0c;ArkTS 还支持自定义组件。使用自定义组件&#xff0c;可使代码的结构更加清晰&#xff0c;并且能提高代码的复用性。 我们开发的每个页面其实都可以视为自定义组件内置组件的结合 语法说明 自定义组件的语法如下图所示 各部分…

TCL管理Vivado工程

文章目录 TCL管理Vivado工程1. 项目目录2. 导出脚本文件3. 修改TCL脚本3.1 project.tcl3.2 bd.tcl 4. 工程恢复 TCL管理Vivado工程 工程结构 1. 项目目录 config: 配置文件、coe文件等。doc: 文档fpga: 最后恢复的fpga工程目录ip: ip文件mcs: bit流文件等,方便直接使用src: .…

npm包、全局数据共享、分包

使用 npm 包 小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm 包有如下 3 个限制&#xff1a; ① 不支持依赖于 Node.js 内置库的包 ② 不支持依赖于浏览器内置…

webgl canvas系列——快速加背景、抠图、加水印并下载图片

文章目录 ⭐前言⭐canvas绘制图片&#x1f496;绘制csdn图片&#x1f496;给png图片加背景&#x1f496;cavans下载图片&#x1f496;cavans上传图片并抠图&#x1f496;cavans添加文字水印&#x1f496;inscode 完整代码块 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#x…

建设IAM/IDM统一身份管理,实现系统之间的单点登录(SSO)

企业实施身份管理的现状&#xff1a; 1.身份存储分散&#xff0c;不能统一供应诸多应用系统&#xff0c;企业用户信息常常存在于多个系统&#xff0c;如HR系统有一套用户信息&#xff0c;OA系统也有一套用户信息&#xff0c;身份存储不集中&#xff0c;不能统一地为诸多应用系…

AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

Tomcat(二)

一、搭建个人博客 二、状态页 默认的管理页面被禁用&#xff0c;启用方法如下 修改conf/conf/tomcat-users.xml 2.1 开启状态页&#xff08;本地访问&#xff09; 2.2 开启允许远程登录状态页 2.3 host manager

【Spark编程基础】RDD 编程初级实践(附源代码)

目录 一、实验目的二、实验平台三、实验内容1.spark-shell 交互式编程2.编写独立应用程序实现数据去重3.编写独立应用程序实现求平均值问题 一、实验目的 1、熟悉 Spark 的 RDD 基本操作及键值对操作&#xff1b; 2、熟悉使用 RDD 编程解决实际具体问题的方法 二、实验平台 …

C语言字符串函数strstr、strtok和strerror

1.strstr函数 函数作用&#xff1a; 在字符串1中查找是否存在字符串2。 例子&#xff1a; "bbc"中找”bc“ 函数定义&#xff1a; const char * strstr ( const char * str1, const char * str2 ); str1字符串1的首字符的指针。str2字符串2的首字符的指针。const修…

ICANN备稿时debug遇到的问题

包问题 装包&#xff1a;先用fastai出现单击没有跳转的情况&#xff1a;安装pylance即可出现了用pip3 uninstall后pip3 list还有原来的numpy&#xff0c;然后用conda uninstall之后就行了。pip, pip3, conda这几个来回用。 精度问题 打印tensor数组自动保留后四位&#xff1a;…

git问题列表(一)(持续更新中~~~)

文章目录 问题1&#xff1a;如何在本地创建git仓库&#xff0c;并推送到远程仓库&#xff1f;问题2&#xff1a;如何创建本地分支&#xff0c;并基于其创建远程分支&#xff1f;问题3&#xff1a;报错“origin does not appear to be a git repository”是什么原因&#xff1f;…