Flask自定义转换器,实现路由匹配正则表达式参数

Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式

1 # 路由传递的参数默认当做string处理
2 # 这里指定int,尖括号中冒号后面的内容是动态的
3
4 @app.route(‘/user/<int:id>‘)
5 def hello_itcast(id):
6     return ‘hello itcast {}‘.format(id)

Flask默认的转换器有以下几种

  • int::接受整数
  • float:同int,但是接受浮点数
  • path:和默认的相似,但也接受斜线

让Flask向Django一样拥有一个正则表达式匹配参数的功能

 1 # 导入BasseConverter类,作为所有自定义转换器的父类
 2 from werkzeug.routing import BaseConverter
 3
 4
 5 # 定义自己的转换器,继承于BaseConvert类
 6 class RegexConverter(BaseConverter):
 7     def __init__(self, url_map, regex):
 8         # 调用父类的构造方法
 9         super().__init__(map=url_map)
10         # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
11         self.regex = regex
12
13 # 将自定义的转换器添加到flask的应用中
14 app.url_map.converters[‘re‘] = RegexConverter
15
16 # 然后就可以用了 re(r‘regex‘):mobile 的方式使用,如下
17 # 这里匹配的是一个十一位的数字
18 @app.route(‘/send/<re(r"\d{11}"):mobile>‘)
19 def send_message(mobile):
20     return ‘send message to {}‘.format(mobile)

通过上述方法,Flask的路由传递参数也可以像Django框架那样灵活的使用正则表达式了

原文地址:https://www.cnblogs.com/springionic/p/10792124.html

时间: 2024-08-05 08:35:39

Flask自定义转换器,实现路由匹配正则表达式参数的相关文章

flask自定义转换器

flask作为轻型WEB框架,在web开发中,可能会出现限制用户访问的规则的场景,那么这个时候,就需要过滤指定用户,所以可以使用转换器实现.转换器的本质是:通过正则表达式匹配路由地址flask 系统自带的转换器有 DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': AnyConverter, 'path': PathConverter, 'int': IntegerConve

Flask学习 2修改路由规则 传入参数访问url

#!/usr/bin/env python # encoding: utf-8 """ @version: v1.0 @author: cxa @file: flask02.py @time: 2018/04/13 14:55 """ """ 要给 URL 添加变量部分,你可以把这些特殊的字段标记为 <variable_name> , 这个部分将会作为命名参数传递到你的函数.规则可以用 <conve

自定义转换器 IValueConverter

如果要将值转换器与绑定关联,请创建一个实现 IValueConverter 接口的类,然后实现 Convert 和 ConvertBack 方法. 转换器可以将数据从一种类型更改为另一种类型,根据区域性信息转换数据,或修改表示形式的其他方面. 有关某些典型的转换器方案示例,请参见数据绑定概述中的“数据转换”. 值转换器是分区域性的. Convert 和 ConvertBack 方法都具有指示区域性信息的 culture 参数. 如果区域性信息与转换无关,那么在自定义转换器中可以忽略该参数.Con

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

Nginx自定义模块编写:根据post参数路由到不同服务器

Nginx自定义模块编写:根据post参数路由到不同服务器 2014-05-05 15:27 blogread IT技术博客 字号:T | T Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,Nginx默认的配置规则就捉襟见肘了,但是没关系,Nginx提供了强大的自定义模块功能,我们只要进行需要的扩展就行了. 我们来理一下思路,我们的需求是: Nginx根据http包体的参数,来选择合适的路由 在这之前,我们先来考虑另

vue基础——动态路由匹配(带参数的路由)

路由里面带参数,这种情况也是比较常见的,具体用法如下所示: 原文地址:https://www.cnblogs.com/chaoyueqi/p/10244143.html

四十七、django路由匹配,分组,反向解析,路由分发,视图层

路由匹配: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^text', views.text), url(r'^testadd', views.testadd), ] 第一个参数是一个正则表达式,也就意味着在路由的匹配的时候,是按照正则匹配的规则去匹配, 路由匹配的顺序是从上往下依次匹配,所有如上两个路由test前面一样,第三个路由一直会匹配不上 正确写法: urlpatterns = [ url(r'^admin/', adm

Vue自定义指令和路由

一.自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 下面我们注册一个全局指令 v-focus,该指令的功能是在页面加载时,元素获得焦点: <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.direct

Go的http包中默认路由匹配规则

# 一.执行流程 首先我们构建一个简单http server: ```go package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) log.Fatal(http.Liste